tail -f
(または類似の)ファイル、およびgrep
を同時に?そのような動作を探すだけの他のコマンドを気にしません。
GNU tail
およびGNU grep
を使用すると、tail -f
簡単な構文を使用します。
tail -f /var/log/file.log | grep search_term
追加 --line-buffered
からgrep
に変更すると、遅延が減少する可能性があります。場合によっては非常に役立ちます。
tail -f foo | grep --line-buffered bar
正常に動作します。より一般的には、grep
はプログラムが出力していないときに待機し、出力が来ても読み続けます。
$ (echo foo; sleep 5; echo test; sleep 5) | grep test
5秒間何も起こらず、grepは一致した「テスト」を出力し、5秒後にパイププロセスが終了すると終了します。
単に grep
の出力をtail -f
)にパイプすることができます 。 tail -f
機能とフィルタリングおよびカラーリングを組み合わせたプログラムもあります。特に multitail ( examples )です。
私はこれらすべての人々がtail -f
を使用するように言っているのを見ますが、その制限が好きではありません!新しい行を監視しながらファイルを検索する私のお気に入りの方法(たとえば、通常、cronジョブを介して定期的に実行されるプロセスのリダイレクトされた出力が追加されるログファイルで作業します)は次のとおりです。
tail -Fn+0 /path/to/file|grep searchterm
これは、GNU tailおよびgrepを前提としています。tailマンページからのサポート詳細(GNU coreutils、鉱山はv8.22)[ https://www.gnu.org/software/coreutils /manual/coreutils.html] :
-F same as --follow=name --retry -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth. If the first character of K (the number of bytes or lines) is a '+', print beginning with the Kth item from the start of each file, otherwise, print the last K items in the file. K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
したがって、私のコマンドの最後の部分はtail --follow --retry --lines=+0
に相当します。最後の引数は、コマンドを開始してゼロ行をスキップするように指示します。
tail -f access | awk '/ADD/{print $0}'
上記を使用して、私は通常それを使用します。
できます。ただし、出力が瞬時ではなくなることに注意してください。パイプを介してバッファリングされます。
Netcatを使用して、tail -fの結果をgrepすることができます。
Sudo nc -s localhost -l -p 1337 | grep ssh
tail -f /var/log/file.log | nc 127.0.0.1 1337
これにより、ポート1337からの入力の結果をリッスンするようにgrepが設定されます。
2番目のコマンドは、tail -fの出力をnetcatにパイプし、localhost 1337に送信します。ローカルで実行するには、2つのコマンドセットそれぞれのttyを切り替えるか、screenなどを使用する必要があります。