
ログファイルから特定の行を選択してテキストファイルに保存する必要があります。次の方法を試しましたが、どちらも期待どおりに機能しません。 "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
これは、grep
stdoutストリームバッファリングモードをラインバッファリングに設定します。それ以外の場合は、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