使用grep -Einvw“regexp”查找包含以某些字符开头的单词的行?

时间:2017-10-02 04:15:45

标签: regex grep

我使用grep相当新,并希望找到包含至少两个以“go”开头的单词的行。此外,要确定单词是否已结束,必须遵循空格,句点,逗号或分号。

我提出的解决方案如下:

grep -Ein " go[a-z]*[ .,;].* go[a-z]*[ .,;]" file.txt

这将返回符合我标准的三个结果,但我知道有四种可能的解决方案。有人可以请一些建议吗?

3 个答案:

答案 0 :(得分:0)

Gnu grep支持\b“单词边界”,你可能想在第一个单词的开头使用它,因为它也匹配在行的开头。 (您当前的正则表达式要求两个单词前面都有空格。)

答案 1 :(得分:0)

巴斯的回答是正确的。 这是一个可能的解决方案,用于检测这样一条线:

\bgo\w*\b.*\bgo\w*\b

如果您希望它不区分大小写(将匹配“GoPro”或“GOAL”等字词):

\b[gG][oO]\w*\b.*\b[gG][oO]\w*\b

根据您期望的单词,如果您想要匹配特殊的单词字符,例如“é”,您可以随时添加它:

\b[gG][oO][\wéÉ]*\b.*\b[gG][oO][\wéÉ]*\b

注意:匹配不会返回整行,只测试它是否匹配。

答案 2 :(得分:0)

这应该做的工作:

grep -Ein '\bgo.*\bgo' file.txt

<强>解释

\b  : word boundary, makes sure we don't have any letter before
go  : literally "go"
.*  : 0 or more any character
\b  : word boundary, makes sure we don't have any letter before
go  : literally "go"

使用file.txt:

goabc xyz go def
goabc xyz defgo
goabc xyz go def

它给出了:

1:goabc xyz go def
3:goabc xyz go def