grepと正規表現

grepと正規表現

ファイルのすべての行を次のパターンと一致させたいと思いますgrep

Abc::xyz() [18-Feb-15 12:09:16]

grepを使って次の正規表現を考えましたが、一致するものは返されません。正しい正規表現を使用するのに役立ちます。

grep -E "^[:alnum:]::[:alnum:]\(\)[:space:]\[.*\]$" <file_name>

Pythonでは次の正規表現が機能しますが、grepでは機能しません。

^.*::.*\(\) \[.*\]$

答え1

これに固執するには、次のようにします。

grep -E "^[[:alpha:]]+::[[:alpha:]]+\(\)[[:space:]]\[.*\]$"

たとえば、

$ echo "Abc::xyz() [18-Feb-15 12:09:16]" | \
    grep -E "^[[:alpha:]]+::[[:alpha:]]+\(\)[[:space:]]\[.*\]$"

出力:

Abc::xyz() [18-Feb-15 12:09:16]

これはより簡単になるかもしれません:

grep -E "^[^:]+::[^(]+\(\) \[[^]]+\]$"

確認する:

$ echo "Abc::xyz() [18-Feb-15 12:09:16]" | grep -E "^[^:]+::[^(]+\(\) \[[^]]+\]$"
Abc::xyz() [18-Feb-15 12:09:16]

関連情報