如何让 grep 抓取第一个匹配项而不是最后一个匹配项

如何让 grep 抓取第一个匹配项而不是最后一个匹配项

假设我有以下字符串:

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

相关内容