我对使用GREP的新手是新手,并且想找到至少包含两个以" go"开头的单词。另外,要确定一个单词是否已经结束,必须遵循一个空间,一个时期,逗号或半隆。
我提出的解决方案如下:
grep -Ein " go[a-z]*[ .,;].* go[a-z]*[ .,;]" file.txt
这返回了三个符合我的标准的结果,但我知道有四个可能的解决方案。谁能给出一些建议?
gnu grep支持b
的"单词边界",您可能想在第一个单词的开头使用它,因为这也与行开头匹配。(您当前的REGEXP要求两个单词都有一个空间。)
低音的答案是正确的。这是一个可能的解决方案,可以检测到这样的线:
bgow*b.*bgow*b
如果您想要案例不敏感(将匹配诸如" gopro"或"目标"之类的单词):
b[gG][oO]w*b.*b[gG][oO]w*b
,取决于您期望的单词,如果您想匹配特殊的单词,例如"é"您始终添加它:
b[gG][oO][wéÉ]*b.*b[gG][oO][wéÉ]*b
注意:比赛不会返回整个行,只需测试是否是匹配。
这应该完成工作:
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"
with file.txt:
goabc xyz go def
goabc xyz defgo
goabc xyz go def
它给出:
1:goabc xyz go def
3:goabc xyz go def