我需要一个grep正则表达式,我想在文本文件上运行。 grep命令应输出文本文件的每一行,其中包含一个单词(让该单词为foo
)后跟一个空格,另一个单词以某个后缀结尾(让该后缀为ing
)
因此正则表达式应匹配以下序列:foo going
,foo walking
,foo running
请注意,ing
之后的foo
应位于下一个字词中。所以正则表达式不匹配:foo asfd asdfing
。
我试过
grep -i "foo .*ing"
但这不仅与下一个单词匹配,如果ing
位于foo
之后的第二个单词中,它也会匹配。
答案 0 :(得分:2)
如果您使用。*将匹配所有内容,则只会匹配文字:
"foo\s[a-zA-Z]+ing"
答案 1 :(得分:2)
假设您的单词不区分大小写,可以使用不敏感标记(?i)
你可以使用这样的正则表达式:
(?i)foo [a-z]*ing
<强> Working demo 强>
顺便说一句,如果foo
和您可以使用的下一个单词之间可以存在多个空格:
(?i)foo\s+[a-z]*ing
如果您认为ing
不是一个词,那么您可以将上面的内容改进为:
(?i)foo\s+[a-z]+ing
如果您希望grep
支持Perl正则表达式,您可以使用:
grep -P '(?i)foo\s+[a-z]+ing'
答案 2 :(得分:2)
您可以使用grep -i "\bfoo [a-z]+ing\b"
它使用单词边界来确保单词只是foo
,而不是kafoo
,后面的单词实际上以ing结尾,如finding
但不是binged
答案 3 :(得分:2)
您可以使用此grep命令匹配单词foo
和以ing
结尾的下一个单词:
grep -Ew 'foo[[:blank:]]+[^[:blank:]]+ing' file
<强>测试强>
cat <<'EOF' | grep -Ew 'foo[[:blank:]]+[^[:blank:]]+ing'
pqr foo going
bar foo walking
bar tofoo walking
foo running
abc def foo asdf asdfing
EOF
<强>输出:强>
pqr foo going
bar foo walking
foo running
答案 4 :(得分:1)
我使用egrep代替grep:
来使用这个简短的脚本egrep -i "foo\s+\w+ing\b" foo.txt
直接等同于:
grep -Ei "foo\s+\w+ing\b" foo.txt
我想出的输入文件(诗歌,真的)看起来像这样:
I was a little under the weather,
so I decided to foo going, and that involved
a lot of foo walking, and maybe just a little
bit of foo running, but certainly no foo
dancing or anything like that, because nobody wants
to be caught dancing any kind of way, especially
the foo way!
输出如下:
so I decided to foo going, and that involved
a lot of foo walking, and maybe just a little
bit of foo running, but certainly no foo
根据我对说明的阅读,这是我期望看到的。