2017-09-20 18 views
2

helloworld(...)のファイルに対してregexpをgrepするには、拡張子が '.get'の行のみが含まれていますか?大括弧で囲まれた正規表現を理解できない

a(text) 

b(text) 

helloworld(
text.get 
text.get 
text.get 
text.get 
) 
c(text) 

そこで、このような例:

a(text) 

b(text) 

helloworld(
text.pass 
text.pass 
text.pass 
text.pass 
) 
c(text) 

を発見すべきではない私は、正規表現[a-z_]+\.getを試してみましたが、それは拡張子を持つファイルを検索するのに役立ちますが、私は方法がわかりませんhelloworld(で終わり、)

+0

'grep'試合:

grep -zoP 'helloworld\s*\(\s*(\w+\.get\b\s*)+\)\s*' file 

は、ディレクトリの使用に一致するすべてのファイルを一覧表示するには1行ずつ。あなたは複数行に一致することはできません – Toto

+0

それは異なります。 helloworldと.getを含むファイルを探したい。私は、複数行をサポートすることは重要ではないと思います。どう思いますか? – vladiqtx

+1

helloworldと.getを含むファイルの名前を表示するには、 'awk '/ helloworld/{a = 1} /\.get/{b=1} END {if(a && b)print FILENAME}' *'となります。それはあなたが探しているものですか? –

答えて

2

の場合:第二のファイルの

helloworld(
text.get 
text.get 
text.get 
text.get 
) 

の検索結果を

このperlのワンライナーは、あなたが何をしたいんあなたはgnu grepを持っていますあなたは、一致ブロックの行のシーケンスとしてしばらくのファイルを扱い、リストにこのコマンドを使用する-zオプションを使用することができます。

grep -zPl 'helloworld\s*\(\s*(\w+\.get\b\s*)+\)\s*' file* 
1

で終わるAKAIK grepは一度に1行で動作します。最初のファイルの

perl -0777 -ne 'print $& if /helloworld\(\R(?:[a-z_]+\.get\R)+\)/' file 

結果:

NOTHING 
+0

私はperlに触れたことがありません:(これは、ディレクトリに対してこれを実装し、 'wc -l 'のような結果をカウントできますか? – vladiqtx

関連する問題