基本正则表达式匹配到第一个句点

基本正则表达式匹配到第一个句点

我正在尝试使用 grep 将搜索词与第一个句点匹配

例如,通过 grep

foobar searchterm. hello world.

应该打印foobar search term blah.我将上述内容保存到名为的纯文本文件中search。但是当我尝试

grep -i 'searchterm.*\.'search

它打印出来

foobar searchterm blah. hello world.

而不是在 blah 之后停止。我这里哪里错了?句号星号.*应该匹配任何直到第一次出现文字句号的字符,\.对吗?

答案1

默认情况下,grep返回整个线其中包含模式,而不仅仅是匹配的模式。

您可以使用该-o选项仅显示匹配的文本。

而且您应该使用非贪婪搜索,这样您就只能匹配搜索词后的第一个句点。您需要使用 Perl 语法 ( -P) 来实现这一点,并?在 后面加上修饰符.*

尝试这样的操作:

grep -P 'searchterm.*?\.' -o search

答案2

您的正则表达式匹配整行,并且 grep 默认输出匹配的行。

您需要告诉 grep 仅输出匹配的部分而不是整行:

$ grep -iEo '.*searchterm.*?\.'

-E标志告诉 grep 使用扩展正则表达式,这允许您使用.*?非贪婪匹配,因此它会在第一个句点处停止。

希望能帮助到你。

相关内容