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ベースの「正規表現」ビルダーは、既存のツールを使ってコマンドラインで同じことを行うことができる理由を理解していません。そのようにすれば、彼らが考案したパターンは、ツール。
あなたは、いくつかの回答が機能しないことを示しました。それらの例がうまくいかない場合は教えてください。理想的には、一致すると予想される行は一致しない行、一致しない行は一致しない行です。 –