ログファイルの文字列を解析し、他の文字列が見つかった場合は逆方向に検索する方法

ログファイルの文字列を解析し、他の文字列が見つかった場合は逆方向に検索する方法

ログファイルから特定の文字列を解析するには、次のコマンドを使用しています。次に、ログから逆さまに検索して、実際に必要なデータを見つけます。問題は、次の例のように50行だけを返すことです。私が探しているテキストが5行後か200行か、それ以上であるかはわかりません。ログファイルで特定の文字列を検索し、その文字列が見つかった場合は、2番目の文字列がどれだけ離れているのかわからない場合でも、ログから後ろに検索して2番目の文字列を見つける方法はありますか?最初の文字列は複数回表示されることもあります。したがって、最初の文字列の各インスタンスについて後方に検索して、2番目の文字列からデータを収集できるようにしたいと思います。

grep -B50 "Server returned HTTP response code: 500 for URL:" LCSoap_8.log | \
tac | grep -P -o '(?<=qualified-src-dn=).*(?=src-dn)'

ベストアンサー1

tac LCSoap_8.log | sed -n '
  /Server returned HTTP response code: 500 for URL:/,/qualified-src-dn=.*src-dn/!d
  s/.*qualified-src-dn=\(.*\)src-dn.*/\1/p'

または、以下を再利用してくださいgrep

tac LCSoap_8.log | sed '
  /Server returned HTTP response code: 500 for URL:/,/qualified-src-dn=.*src-dn/!d' |
  grep -Po '(?<=qualified-src-dn=).*(?=src-dn)'

sed '/A/,B/!d'd̲は、次の行まで(!̲)を除くすべての行を削除します

おすすめ記事