GNU/Linux >> Linux の 問題 >  >> Linux

連続ストリームを「grep」する方法は?

あなたの問題は、grepが出力バッファリングを使用していることだと思います。試してみてください

tail -f file | stdbuf -o0 grep my_pattern

grep の出力バッファリング モードを unbuffered に設定します。


grep をオンにする BSD grep 使用時の行バッファリング モード (FreeBSD、Mac OS X など)

tail -f file | grep --line-buffered my_pattern

--line-buffered 少し前のようです デフォルトでフラッシュされるため、GNU grep(ほぼすべてのLinuxで使用)には問題ありませんでした(SmartOS、AIX、QNXなどの他のUnixライクのYMMV)。ただし、2020 年 11 月現在、--line-buffered が必要です (少なくとも openSUSE の GNU grep 3.5 では必要ですが、以下のコメントに基づいて一般的に必要と思われます)。


tail -f <file> | grep <pattern> を使用します

終了するまでではなく、grep がフラッシュするまで待機します (私は Ubuntu を使用しています)。


全体で一致を見つけたい場合 ファイル (テールだけでなく) を作成し、新しい一致を待つようにしたい場合、これはうまく機能します:

tail -c +0 -f <file> | grep --line-buffered <pattern>

-c +0 フラグは、出力が 0 で始まる必要があることを示しています バイト (-c ) 最初から (+ ) ファイルの。


Linux
  1. ファイル内の複数行パターンを検索するにはどうすればよいですか?

  2. ファイル内で \n を grep する方法

  3. bash シェルでファイルのセクションを grep する方法

  1. Linuxでファイルの名前を変更するにはどうすればよいですか?

  2. 再帰的にgrepするにはどうすればよいですか?

  3. ファイルに文字列を含む行を取得するには?

  1. パターンの後にコンテンツをgrepする方法は?

  2. grep でバイナリ ファイルの一致結果を抑制する方法

  3. Linux で削除されたファイルを復元するには?