sed、grep、awk、またはrubyを使って簡単に見つける方法はありますか?最後大きなログファイルの文字列を一致させ、その後のすべての行(含む)を別のファイルに送信しますか?
例:
grep -A222 "_____________" recent/toptrigs.OX.rb.log
私の最新の回避策は、222行目からコンテキストPostScriptが常にEOFに到達する必要があるためです。最後「の例_____「文字列。同じプロセスで同時に生成されたログファイルです。したがって、各エントリループの最後にSTDOUTとSTDERRを手動でフラッシュし、切断時にこのセグメントを考慮します。
答え1
最も簡単な方法は、一致する前に入力を変更することです。
<logfile tac | sed '/pattern/q' | tac
答え2
以下はいくつかのオプションです。
行の順序を反転する利点を活用し、
tac
grepに次の行を含めるようにし(今は逆になったので、前の行)、最初の一致の後に停止して再び反転して順序を復元できます。次のように表示します。tac /path/to/file | grep -m 1 -B 1 "mypattern" | tac
最後の一致と次の行以外の行を削除します。
grep -A 1 "mypattern" /path/to/file | tail -n 2
あなたはあなたのファイルにそれを試み、どれがあなたの場合より良いパフォーマンスを発揮するかを確認する必要があります。
コマンドの前に標準出力リダイレクトを追加して、ログファイルに出力を追加できます>> /path/to/outputfile
。