次のファイルがあります。
//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が入力にある場合は出力にも含まれます)。