特定の種類のログに属する部分が必要なログファイルがあります。それは複数の行である可能性があります。
は、私がここで直接ログファイルを投稿することはできませんが、それは形式以下である:
2つの同じパターンの間でファイルからコンテンツを抽出します
<date-format> Thread-MESSAGE1 random-message
line 1
line 2
line 3
line 4
<date-format> Thread-MESSAGE1 random-message2
line 5
<date-format> Thread-MESSAGE2 random-message3
line 6
line 7
line 8
line 9
<date-format> Thread-MESSAGE3 random-message4
<date-format> Thread-MESSAGE1 random-message5
<date-format> Thread-MESSAGE1 random-message6
line 10
line 11
<date-format> Thread-MESSAGE7 random-message7
<date-format> Thread-MESSAGE8 random-message9
<date-format> Thread-MESSAGE9 random-message10
<date-format> Thread-MESSAGE1 random-message11
Iが出力する必要があります。私のようにsedを使用したが「スレッドMESSAGE1」を使用してみました
<date-format> Thread-MESSAGE1 random-message
line 1
line 2
line 3
line 4
<date-format> Thread-MESSAGE1 random-message2
line 5
<date-format> Thread-MESSAGE1 random-message5
<date-format> Thread-MESSAGE1 random-message6
line 10
line 11
<date-format> Thread-MESSAGE1 random-message11
'MESSAGE1'キーで2つの連続したログがある場合は、開始パターンと終了パターンの両方が機能しませんでした。
Perlを使って先にネガティブルックアップを使うことを考えましたが残念ながらPerlを使うことはできませんし、 'sed'も 'awk'もパターンのネガティブルックアップをサポートしていません。
tac source_file.log | sed -n '{/<date-format> Thread-/!H; /<date-format> Thread-/{H;d;x} /<date-format> Thread-MESSAGE1/p; d;}' > test.log
アイデアはその後test.logの出力を反転することでしたが、スレッド」の後に中括弧を追加する -/{H; dは、X:
は最近、私は、以下の「sedの」パターンをしようとしていました} 'コマンドの後に余分な文字が表示されています。' もっと良い選択肢はありますか?または、sedの中括弧を使用してコマンドをグループ化する方法はありますか?
ありがとうございます。私は、このコマンドが与えられたファイルに対して動作することを確認しました。しかし、私はちょうど1つの質問があります、今すぐkw = 'スレッド - メッセージ1'は定数文字列です。正規表現を持つことはできますか? – akash12300
正規表現を渡す場合は、awkコマンドの中で '$ 2 == kw'の代わりに' $ 2〜kw'を使います – anubhava