2011-04-21 162 views
1

我试图grep的一个文件...... 文件我有5个实体的grep不能按预期工作

vivek 
vivek.a 
a.vivek 
vivek_a 
a_vivek 

当我用grep为grep -iw vivek文件名,那么就应该给我 vivek只能给它

vivek 
vivek.a 
a.vivek 

回答

1

一组带字母,下划线和数字的字符被视为一个单词。所以除此之外的其他任何字符都表示字边界。因此,在“vivek.a”这一行中,点表示单词的结尾,并且之前的所有字符形成单词“vivek”,与使用选项-w尝试匹配的单词相匹配。

因此,一种方式是这样定义自己的单词界限:

$ grep -i -e "[[:space:]]vivek[[:space:]]" -e "^vivek[[:space:]]" -e "[[:space:]]vivek$" -e "^vivek$" file 
+0

hi sahaj这个命令对于 – 2011-04-25 07:11:15

+0

工作正常hi sahaj这个命令对于vivek,vivek_a,a_vivek工作正常,但对于vivek.a和a.vivek,它同时给出了这两个命令。和_值。我刚刚将vivek替换为vivek.a vivek_a – 2011-04-25 09:33:32

2

对我来说很好。 .是一个非单词字符。如果你的意思是别的,那么你应该使用更具体的正则表达式,而不是使用-w

+0

所以没有选项,通过它我可以diff的黑/白维韦克第二vivek.a – 2011-04-21 05:21:51

+0

都能跟得上。如果你想有一个锚定正则表达式,然后锚定你的正则表达式。 – 2011-04-21 05:23:28

2

它确实是因为(这是w选项选择什么)的定义,允许.分开的话,虽然_被认为是一个字的一部分。这个定义对编程语言很有用,但对英文文本不那么有用。

+0

其实,'_' *被认为是一个单词字符。 – 2011-04-21 05:24:24

+0

但在这里它__选项很好,唯一的问题是。 – 2011-04-21 05:26:28

+0

Sheesh,对不起。我纠正了我的答案。 – wallyk 2011-04-21 06:34:13