最後までログファイルから最後の一致を抽出します。

最後までログファイルから最後の一致を抽出します。

sed、grep、awk、またはrubyを使って簡単に見つける方法はありますか?最後大きなログファイルの文字列を一致させ、その後のすべての行(含む)を別のファイルに送信しますか?

例:

grep -A222 "_____________" recent/toptrigs.OX.rb.log

私の最新の回避策は、222行目からコンテキストPostScriptが常にEOFに到達する必要があるためです。最後「の例_____「文字列。同じプロセスで同時に生成されたログファイルです。したがって、各エントリループの最後にSTDOUTとSTDERRを手動でフラッシュし、切断時にこのセグメントを考慮します。

答え1

最も簡単な方法は、一致する前に入力を変更することです。

<logfile tac | sed '/pattern/q' | tac

答え2

以下はいくつかのオプションです。

  • 行の順序を反転する利点を活用し、tacgrepに次の行を含めるようにし(今は逆になったので、前の行)、最初の一致の後に停止して再び反転して順序を復元できます。次のように表示します。

    tac /path/to/file | grep -m 1 -B 1 "mypattern" | tac
    
  • 最後の一致と次の行以外の行を削除します。

    grep -A 1 "mypattern" /path/to/file | tail -n 2
    

あなたはあなたのファイルにそれを試み、どれがあなたの場合より良いパフォーマンスを発揮するかを確認する必要があります。

コマンドの前に標準出力リダイレクトを追加して、ログファイルに出力を追加できます>> /path/to/outputfile

関連情報