假设我有以下字符串:
hello hi this test is test a test greeting test hello hello
如果我这样做grep -o "hi.*test"
,我会得到:
hi this test is test a test greeting test
它会搜索从第一次匹配的“hi”到最后一次匹配的“test”之间的所有内容。我怎样才能让它在第一次匹配时停止搜索。又名:
如果我这样做grep -o "hi.*test"
(当然使用额外的标志或不同的命令),我将得到:
hi this test
代替:
hi this test is test a test greeting test
它需要在第一次“测试”时停止,而不是最后一次。
我该怎么做?谢谢!
编辑以澄清:如果我有以下内容:
hello this is a test hello this is a test
然后我执行 grep "hello.*test",我将获得完整的字符串。但我想要:
hello this is a test
hello this is a test
也就是说,它找到了两次该字符串。也就是说,它搜索了“hello this is a test”,并且找到了两次。
答案1
您可以使用 PCRE 模式 ( grep -P
) 通过使用 Perl 非贪婪修饰符来执行此操作?
:
$ printf '%s\n' 'hello this is a test hello this is a test' | grep -Po 'hello.*?test'
hello this is a test
hello this is a test