28

更新されたログファイルを追跡するために「tail-f」を使用しています。次に、その出力をgrepにパイプして、検索語(この場合は「org.springframework」)を含む行のみを表示します。最後に、grepからの出力を3番目のコマンド'cut'にパイプ処理します。

tail -f logfile | grep org.springframework | cut -c 25-

cutコマンドは、grepから入力を取得できる場合、各行の最初の25文字を削除します。(チェーンから「grep」を削除すると、期待どおりに機能します。)

私はbashでcygwinを使用しています。

実際の結果:「cut」コマンドに接続するために2番目のパイプを追加すると、入力を待っているかのようにハングします(不思議に思うかもしれませんが)。

4

3 に答える 3

29

GNU grep を想定--line-bufferedして、コマンド ラインに追加します。

tail -f logfile | grep --line-buffered org.springframework | cut -c 25-

編集:

cut は行ごとのバッファリングを許可しないため、grep バッファリングだけが問題ではないことがわかります。

sed など、制御できるものに置き換えてみてください。

tail -f logfile | sed -u -n -e '/org\.springframework/ s/\(.\{0,25\}\).*$/\1/p'

または awk

tail -f logfile | awk '/org\.springframework/ {print substr($0, 0, 25);fflush("")}'
于 2009-06-10T21:24:30.307 に答える
12

私のシステムでは、出力を得る前に約 8K がバッファリングされました。このシーケンスは、ファイルをすぐに追跡するように機能しました。

tail -f logfile | while read line ; do echo "$line"| grep 'org.springframework'|cut -c 25- ; done
于 2009-06-10T21:12:49.173 に答える
-1

あなたが持っているものはうまくいくはずです - それがパイプラインの全体的な考え方です。唯一の問題は、I have (GNU coreutiles 6.10) のバージョンでは、最初の 24 文字を削除するcutために構文を使用するcut -c 25-(つまり、プラス記号の代わりにマイナス記号を使用する) 必要があることです。

また、関連する場合に備えて、2 つの例でさまざまなパターンを検索しています。

于 2009-06-09T20:46:11.930 に答える