我正在搜索一个多行文本文件,并希望匹配来自某个单词的字符串,直到另一个单词的第一个匹配:
start
word1
word1
word1
word1
end
word2
word2
word2
start
word3
word3
word3
end
这是我使用的:grep -Pzo "(?s)start.*?end" file.txt
它从头到尾匹配上面文本字符串中的所有内容,而我只想匹配到第一次end
出现,即:
start
word1
word1
word1
word1
end
我究竟做错了什么?
不知何故,非贪婪?
量词没有像我预期的那样工作。
感谢您的时间和贡献!
贪心匹配将包括从第一个
start
到最后一个的所有内容end
,因此:您实际看到的是两个单独的非贪婪匹配,每个选项在单独的“行”上输出
-o
- 除了-Z
,“行”实际上由空字符而不是换行符表示:-b
由于我们在这里看不到空字节,如果在“行”中添加以指示两个匹配项的字节偏移量会更清楚:由于
-o
输出是空分隔的,您可以通过管道传递结果head -z
以获取第一个匹配项:或者你可以使用 perl 本身
尽管有
for
循环,但由于g
省略了标志,它只打印一个匹配项。