2009-03-12 4 views
1

私のログファイルには、次が含まれています。正規表現

2009-03-12T12:44:27+0000 something was logged 
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 

私は繰り返し、「最後のメッセージを持つ行を取得する正規表現を書くことができます。 .. "ステートメントは、それに先行する行を検索することなく無意味です。

「最後のメッセージが繰り返されました...」という文が検出されたときに、私は両方の行を取り出すことができる正規表現を知っていますか?

答えて

2

編集は2グループマッチング正規表現であることを。 RegexLib

少ないが、その後、最適化されたが、この:

:に結果の

2009-03-12T12:44:27+0000 something1 was logged 
2009-03-12T12:44:27+0000 something2 was logged 
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 
2009-03-12T12:44:27+0000 something3 was logged 
2009-03-12T12:44:27+0000 something4 was logged 
2009-03-12T12:44:27+0000 something5 was logged 
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 

([\r\n].*?)(?:=?\r|\n)(.*?(?:last message repeated).*) 

はこのようなもののうち、結果を得るために働くべきであるあなたはそれをで打撃を与えることができます

Matches 
First Match, First Group: 2009-03-12T12:44:27+0000 something2 was logged 
First Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 
Second Match, First Group: 2009-03-12T12:44:27+0000 something5 was logged 
Second Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 
0

私はこのようにします。 2つのグループを含むパターンを検索してみてください。最初のグループは、「最後のメッセージが繰り返された」テキストを含む別の行を含む別のグループが続く行です。最初のグループの内容は、あなたが探しているテキストです。このような

何か(これは過度に正規表現を簡略化されている):

\n(.*)\n(.*)last message repeated 

今最初のグループ値は、興味のある行が含まれている

+0

正規表現はどのように見えますか? – Huuuze

+0

@David:あなたは2つのグループと正規表現を与えることができますか? – goldenmean

+0

答えにRegexesが追加されました。それらはシンプルですが、アイデアを得ることができます。彼らは動作します - 私はRegexのバディでそれらを確認しました。 –

1

正規表現にする必要はありますか? grepは一致前後の文脈を得ることができます(-B NUM-A NUMオプション)

+0

良い答えですが、はい、それは正規表現でなければなりません。 – Huuuze

0

パターン^。* $は、行全体に一致します。翻訳:Start Of Line、任意の数の文字、それに続くEnd Of Line。だから、おそらく、あなたはそこに持っているパターン "に続いて"任意の行を検索することができます。