CLI で正規表現を使用する Grep は何も返しません。

CLI で正規表現を使用する Grep は何も返しません。

次のファイルがあります。

//TESTCASES=3
//MARK=9

[runscript]
nc dec s10 s11
[/runscript]

[checks]

[/checks]

[testcase]
// List: 1, 2, 3, 5, 0xA, -1
.global LIST
.data
LIST: 
.word 1, 2, 3, 5, 0xA, -1
[/testcase]

grepとregexの使用[runscript]の間にテキストを取得しようとしています。[/runscript]

正規表現が独立して動作することを確認しました。

(?<=\[runscript\]\n)(.|\n)*(?=\[\/runscript\])

しかし、grepは何も返しません。オプションの問題ですか?私はこれらのアプローチの多くを個別にまたは組み合わせて試しました。

-P、-e、-E、-w、-o

私は何を見逃していますか?

ベストアンサー1

grep一度に 1 行だけ処理されるため、正規表現に一致する内容には改行文字は含まれません。

perl / PCRE演算子を使用したいので、一致の一部を報告するように指示できるpcregrep複数行のパターンでsumを使用できます。-M

pcregrep -xMo1 '(?s)\[runscript\]\n(.*?)\n\[/runscript]'

または:

pcregrep -xMo1 '(?s)\[runscript\]\r?\n(.*?)\n\[/runscript]\r?'

MS-DOSスタイルCRLF行区切り文字を許可します(ここでCRが入力にある場合は出力にも含まれます)。

おすすめ記事