grep没有按预期工作

时间:2011-04-21 05:19:04

标签: linux

我试图在文件中grep ...... 在文件中我有5个实体

vivek
vivek.a
a.vivek
vivek_a
a_vivek

当我grep为grep -iw vivek文件名时,它应该给我 只是vivek,但它给了

vivek
vivek.a
a.vivek

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

这样做是因为单词的定义(这是w选项选择的内容)允许.分隔单词,但_被认为是{{1}}一个词的一部分。这个定义对编程语言非常有用,但对英文文本却没那么有用。

答案 2 :(得分:1)

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

所以,一种方法是定义你自己的单词边界:

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