pcregrepはどのように機能しますか?

pcregrepはどのように機能しますか?

ファイルがあります:

This error
-this
-this
-that
[text I want]
This error
-asd
-asfag
-adsfhs
[text I want]
[text I want]
This error
-asdgsda
-asdgg
-gasdg

除いて一致させたいですThis error and next three lines。以下を使用できます。

pcregrep -vM  'This error\n.*\n.*\n' file

出力は次のとおりです。

[text I want]
[text I want]
[text I want]

ただし、同じコマンドを使用して(削除して)一致させるには、削除するのではなくv次のようにします。

pcregrep -M  'This error\n.*\n.*\n' file

出力は次のとおりです。

This error
-this
-this
This error
-asd
-asfag
This error
-asdgsda
-asdgg

pcregrepそれでは、実際の効果は何ですか?

答え1

.*正規表現の末尾に追加されます。

pcregrep -M  'This error\n.*\n.*\n.*' file
pcregrep -vM 'This error\n.*\n.*\n.*' file

バグのせいかはわかりませんが-v最後の試合以降ライン全体を除外するようですが\n-vそれなしではそうではありません。したがって、追加.*(つまり、regexで終わらない\n)は、どちらの場合も最後の行と明示的に一致するため、問題/機能はトリガされません。

関連情報