Komuttan çıktı ile iki şey yapma


9

texcountBenim LaTeX belgedeki kelime sayısını çıktı bir program var. Ayrıca sed, satırsonu TeX çizgi satırları yapmak ve daha sonra son belgeme ekleyebileceğim bir dosyaya yazmak için bunun çıktısını da ekleyebilirim. Ama texcount foo.tex | sed s/$/'\\\\'/ > wc.texkomut satırını yaptığımda çıktıları texcountbastırılıyor.

İlk komutun çıkışını terminalde görüntülenecek ve sed'e borulanacak şekilde nasıl alabilirim?

Yanıtlar:


9

İkinci komut için anonim bir kanal kullanabilirsiniz:

texcount foo.tex | tee >(sed s/$/'\\\\'/ > wc.tex)

Bu cevabın esas kısmı kullanmaktır tee. Bash gibi belirli mermileriniz varsa, tee çıkışını kullanarak boru oluşturabilirsiniz >(some further commands). Diğer mermilerde, tee'ye bir dosya adı argümanı vermelisiniz (bu onun standart çalışma modudur) ve sonra çalıştırıp some further commands < thatfileo dosyayı silmeniz gerekir. Veya aşağıda Hari'nin cevabına bakınız.
dubiousjim

tee, tee ve tee.
bagavadhar

7

Boruları ayırmanıza izin veren "tee" komutuna ihtiyacınız vardır.

texcount foo.tex | tee >output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt

Bu size ek output.txt dosyası bırakacaktır. Daha fazla bilgi için bunu okuyun: http://www.unixtutorial.org/2007/12/tee-replicate-standard-output/ "Erkek tişört" de yapabilirsiniz.


texcount foo.tex | tee unmodified |sed s/$/'\\\\'/ > modifiedçıktının değiştirilmiş ve değiştirilmemiş sürümlerini iki dosyaya yerleştirir. Değiştirilmemiş sürümü terminale nasıl yazdırabilirim? Denedim tee stdoutama hiçbir şey
basmıyor

3
Bunu yapamazsınız, çünkü tee girdisini stdout'a ve bir dosyaya gönderir. Stdout sed için girdi haline gelir. && cat unmodifiedSonunda ekleyebilirsiniz . Bu, değiştirilmemiş çıkışı terminale dökecektir.
KeithB

Burada uygun komut satırı olurdu texcount foo.tex | tee output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt. Veya kullanabilirsiniz texcount foo.tex | tee output.txt; sed s/$/'\\\\'/ output.txt > wc.tex. Her iki durumda da, muhtemelen daha sonra yapmak istersiniz rm output.txt.
dubiousjim

@dubiousjim Bu noktalı virgül doğrudur - boru çalışır, ancak yarım kolon amaçlananı daha iyi ifade eder.
Danny Staple

6

Oldukça deyimsel kullanabilirsiniz

texcount foo.tex | tee /dev/tty | sed s/$/'\\\\'/ > wc.tex

/dev/tty mevcut işlemin kontrol terminalini ifade eden sihirli bir cihazdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.