2011-04-14 6 views
1

をマッチング:、正規表現とgrep例外は、私がログファイルに例外を一致させるために私の正規表現をテストした

.+Exception[^\n]+(\s+at.++)+ 

そして、それは私がここに貼り付けた例のカップルのために働く:

http://gskinner.com/RegExr/

正規表現ですgrepで使用しているときは表示されません。

grep '.+Exception[^\n]+(\s+at.++)+' server.log 

grepにはある程度のextr正規表現を動作させるためのフラグ?

更新:

それは私が例外を出力します何を探しています、正規表現である必要はありません。

+0

あなたは、いくつかの回答が機能しないことを示しました。それらの例がうまくいかない場合は教えてください。理想的には、一致すると予想される行は一致しない行、一致しない行は一致しない行です。 –

答えて

1

拡張正規表現-E -e <regex>を使用する場合は、-e <regex>オプションを渡す必要があります。男を見てみましょう:あなたのようなものに見えるラインを見つけるしようとしているように見えますman grep

+0

答えをありがとう、私はまだそれは動作しませんでした – London

+0

@ロンドン私は答えを編集しました、今は(私はそうだと思う)働く必要があります –

+0

まだ動作していません – London

0

:正規表現を使用するので、最初

... Exception foobar at line 7 ... 

は、あなたがgrep-eを使用する必要があり、またはegrepを実行してください。

次に、式の最初に.+を指定する必要はありません。あなたが探しているものを最小限に抑えることが通常は最高です。 「例外」の前に少なくとも1文字が必要な場合は、.を使用してください。

また、\sは、スペースを要求するperl-ishの方法です。 grepはPOSIX正規表現を使用しているので、等価は[[:space:]]です。

だから、私が使用します。

grep -e 'Exception.*[[:space:]]at' 

これは、あなたがMUSSと大騒ぎの最小量で欲しいものを得るでしょう。

+0

あなたの答えをありがとう、 – London

2

grepのすべてのバージョンが同じ構文を理解しているわけではありません。

  • あなたのパターンは、それがegrepの領土であることを意味しており、1回以上の繰り返しのために+が含まれています。
  • しかし、grepのほとんどのバージョンは無知ですが、空白には\sもあります。
  • 最後に、先ほどのアトムのオーナーシップマッチを意味する++があります。これはかなり洗練された正規表現エンジンだけが理解できるものです。あなたは非本質的な試合を試みるかもしれません。

ただし、先頭に.+は必要ないため、必要な文字列に直接ジャンプすることができます。また、なぜ[^\n]を使用するのかはわかりません。それは、.が通常意味するもので、あなたがすでに行モードで動作しているためです。

grep -Pがある場合は、それを試してみてください。私はあなたのパターンのより単純ですが同等のバージョンを使用しています。あなただけの完全一致を与えることgrepにオプションを使用していないので、私はあなたがレコード全体をしたいと仮定します。

$ grep -P 'Exception.+\sat' server.log 

しかし、それは動作しない場合、あなたは常に大きな銃を引き出すことができます。

$ perl -ne 'print if /Exception.+\sat/' server.log 

そして、あなただけの正確な一致をしたい場合、あなたはあなたと遊ぶのに十分なバリエーションを与える必要があります

$ perl -nle 'print $& if /Exception.*\bat\b.*/' server.log 

を使用することができます。

Webベースの「正規表現」ビルダーは、既存のツールを使ってコマンドラインで同じことを行うことができる理由を理解していません。そのようにすれば、彼らが考案したパターンは、ツール。

+0

+1そして私は、ローカルボックスでのテストが最善の方法であることに同意します。しかし、他の人のブラケットレベルをすばやく調べる必要があるときは、自分の[オンラインツールを使って動的に正規表現の構造を表示する](http://jmrware.com/articles/2010/dynregexhl/DynamicRegexHighlighterTester.html)を頻繁に使用します)スパゲッティコード正規表現。見てみな! – ridgerunner

関連する問題