他のコマンドの出力を保存します。

他のコマンドの出力を保存します。

ログファイルから特定の行を選択してテキストファイルに保存する必要があります。次の方法を試しましたが、どちらも期待どおりに機能しません。 "todel.txt"ファイルは0バイトを表示します。

tail -f general.log | grep Some_word > >(tee -a todel.txt)

tail -f general.log | grep Some_word ; tee  todel.txt

tail -f general.log | grep Some_word | tee -a todel.txt

答え1

stdbuf(1)パイプラインに以下を追加する必要があります。

tail -f general.log | stdbuf -oL grep Some_word | tee -a todel.txt

これは、grepstdoutストリームバッファリングモードをラインバッファリングに設定します。それ以外の場合は、grepストリームから少なくとも4096バイトを取得するのを待ちます(これはLinuxでバッファリングされたI / Oのデフォルトです)。

または次にgrep電話することができます--line-buffered

tail -f general.log | grep --line-buffered Some_word | tee -a todel.txt

バラよりパイプラインでバッファリングをオフにするそしてhttp://www.pixelbeat.org/programming/stdio_buffering/詳細な説明のために。

答え2

3番目は、現在のディレクトリにファイルを書き込む権限があると仮定すると正しく機能します。

たとえば、tail -f general.log | grep "Some_word" | tee todel.txt

これは正しく定義されたtee構文です。うまくいかない場合は、他のことを間違っているのです。

また、検索文字列を引用符で囲むことをお勧めします。現在の作業ディレクトリに検索文字列と一致するファイル名がある場合は、検索文字列の代わりにファイルパラメータとして扱うことができます。

答え3

grep "my words" > mytextfile.txt
tail -f access.log > last_log.txt
tail -f access.log | grep "IP address" > hacker.log

答え4

あなたが探している電話番号が次のアドレスに送信されることがあります。標準出力ではなく標準エラー、この場合、行を次に終了したら2>&1トリックを実行する必要があります。

tail -f general.log | grep Some_word | tee -a todel.txt 2>&1

関連情報