我使用grep相当新,并希望找到包含至少两个以“go”开头的单词的行。此外,要确定单词是否已结束,必须遵循空格,句点,逗号或分号。
我提出的解决方案如下:
grep -Ein " go[a-z]*[ .,;].* go[a-z]*[ .,;]" file.txt
这将返回符合我标准的三个结果,但我知道有四种可能的解决方案。有人可以请一些建议吗?
答案 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