正则表达式匹配一个单词后跟另一个具有特定后缀的单词

bet*_*eta 3 regex grep

我需要一个 grep 正则表达式,我想在一个文本文件上运行。grep 命令应输出文本文件的每一行,其中包含一个单词(令该单词为foo),后跟一个空格和另一个以某个后缀结尾的单词(令该后缀为ing)。

因此正则表达式应该匹配以下序列:foo going, foo walking,foo running

请注意,ing应该位于 后面的下一个单词中foo。所以正则表达式应该匹配:foo asfd asdfing

我试过

grep -i "foo .*ing"
Run Code Online (Sandbox Code Playgroud)

但这不仅匹配紧邻的下一个单词,还匹配 ifing位于 后第二个单词中的情况foo

Fed*_*zza 5

假设您的单词不区分大小写,您可以利用不敏感标志(?i)

您可以使用这样的正则表达式:

(?i)foo [a-z]*ing
Run Code Online (Sandbox Code Playgroud)

工作演示

foo顺便说一句,如果和下一个单词之间可以存在多个空格,您可以使用:

(?i)foo\s+[a-z]*ing
Run Code Online (Sandbox Code Playgroud)

如果你认为这ing不是一个词,那么你可以将上面的改进为:

(?i)foo\s+[a-z]+ing
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

如果你想grep支持 Perl 正则表达式,你可以使用:

grep -P '(?i)foo\s+[a-z]+ing'
Run Code Online (Sandbox Code Playgroud)