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



我对使用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

最新更新