コマンドからの出力で2つのことを行う


9

texcountLaTeXドキュメントの単語数を出力するプログラムがあります。また、この出力をパイプしsedて改行をTeX改行にし、これをファイルに書き込んで、最終的なドキュメントに含めることもできます。しかしtexcount foo.tex | sed s/$/'\\\\'/ > wc.tex、コマンドラインを実行すると、出力texcountが抑制されます。

どのように私は、最初のコマンドの出力が端末に表示されるように得ることができるのsedにパイプ?

回答:


9

2番目のコマンドには匿名パイプを使用できます。

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

この答えの本質的な部分はを使用することteeです。Bashのような特定のシェルを使用している場合は、Tの出力をを使用してパイプできます>(some further commands)。他のシェルでは、Tにファイル名引数(これはその標準の操作モードです)を指定し、を実行してsome further commands < thatfile、そのファイルを削除する必要があります。または、以下のHariの回答を参照してください。
dubiousjim 2012

ティー、ティー&ティー。
bagavadhar 2012

7

パイプを分割できる「ティー」コマンドが必要です。

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

これにより、追加のoutput.txtファイルが残ります。詳細については、こちらをご覧ください。http//www.unixtutorial.org/2007/12/tee-replicate-standard-output/ 「man tee」を実行することもできます


texcount foo.tex | tee unmodified |sed s/$/'\\\\'/ > modified変更されたバージョンと変更されていないバージョンの出力を2つのファイルに入れます。変更されていないバージョンをターミナルに出力するにはどうすればよいですか?試しましたtee stdoutが何も表示されません...
Seamus

3
teeは入力をstdoutとファイルに送信するので、それはできません。stdoutは、sedへの入力になります。&& cat unmodified最後に追加できます。これにより、変更されていない出力が端末にダンプされます。
KeithB、2011年

ここでの適切なコマンドラインはですtexcount foo.tex | tee output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt。またはを使用することもできますtexcount foo.tex | tee output.txt; sed s/$/'\\\\'/ output.txt > wc.tex。どちらの場合でも、おそらくrm output.txt後でしたいと思うでしょう。
dubiousjim 2012

@dubiousjimそのセミコロンは正しいです-パイプは機能しますが、セミコロンは意図されたものをよりよく表現します。
Danny Staple 2012

6

かなり慣用的に使用できます

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

/dev/tty 現在のプロセスの制御端末を参照する魔法のデバイスです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.