我正在尝试使用 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 使用扩展正则表达式,这允许您使用.*?
非贪婪匹配,因此它会在第一个句点处停止。
希望能帮助到你。