1

该文件是:

google.com a
go.gle.com a
google.com.google.com b
google.com.cloud.com c

当我使用这种方式时:

grep -nre  '^\<google.com\> ' file<br>

我可以得到:

1:google.com a 

但是方式:

grep -nre  '^\<go.gle.com\> ' file<br>

也得到:

1:google.com a
2:go.gle.com a

我想从“ grep -nre '^\<go.gle.com\>'文件”得到的结果是:

2:go.gle.com a

不是

1:google.com a

如何解决?
PS: grep 命令中的域名如“google.com”是不固定的。也许是“goog.e.com”或“.oogle.com”

4

3 回答 3

4

如果你想在字面上匹配点,你必须转义它

grep -nre  '^\<go\.gle\.com\> ' file<br>

是正则表达式中的.特殊字符,匹配除换行符以外的所有字符(默认情况下,表示没有修饰符)

另一种可能性是将点放入字符类中,有些人更喜欢这种表示法:

grep -nre  '^\<go[.]gle[.]com\> ' file<br>

在字符类中,点也只是一个点。

于 2013-04-18T08:57:51.713 回答
1

看起来你需要逃离这个时期。试试grep -nre '^\<go\.gle\.com\>' file

要仅匹配google.com第二个“o”不正确的拼写错误,您可以使用匹配“o”之外的任何内容的字符类:

grep -nre '^\<go[^o]gle\.com\> ' file

扩展它以解释前五个字符中的任何一个不正确:

$ grep -nre '\([^g]oogle\|g[^o]ogle\|go[^o]gle\|goo[^g]le\|goog[^l]e\|googl[^e]\)\.com' file.txt 
2:.oogle.com a
3:gRogle.com a
4:go.gle.com a
5:goonle.com a
6:googqe.com a
7:googla.com a
于 2013-04-18T08:58:22.887 回答
1

您正在寻找的内容(文字匹配grep)对于您的选项是不可能的,因为grep它将被matching pattern视为 RegEx,因此 dot 将意味着any character

grep您可以在OR中使用 -F 开关fgrepfixed string match获得结果:

grep -nF 'go.gle.com ' inFile

或者:

fgrep -n 'go.gle.com ' inFile

或者,以下 awk 命令将为您提供您正在寻找的输出:

awk 'index($1, "go.gle.com"){print NR ":" $0}' inFile

或完全匹配:

awk '$1 == "go.gle.com"{print NR ":" $0}' inFile

请注意,我正在使用awk's index function或比较相等性==,因此匹配字符串不被视为正则表达式。

现场演示:http: //ideone.com/FL37Sx

于 2013-04-18T09:26:29.523 回答