基本正则表达式匹配到第一期[重复]


0

这个问题已经在这里有了答案:

我正在尝试使用grep将搜索字词匹配到第一期

例如,通过

foobar searchterm. hello world.

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

grep -i 'searchterm.*\.'search

它打印出来

foobar searchterm blah. hello world.

而不是在blah之后停下来。我这是怎么了?周期星.*应该匹配直到字面周期的第一次出现的所有内容,\.对吗?

Answers:


0

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

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

而且,您应该使用非贪婪搜索,以便仅匹配搜索词后的第一个句点。-P为此,您需要使用Perl语法()和?修饰符.*

尝试这样的事情:

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

0

您的regexp与整行匹配,默认情况下grep输出匹配的行。

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

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

-E标志告诉grep使用扩展的regexp,它允许您使用.*?非贪婪匹配,因此它在第一时间段停止。

希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.