2017-04-11 51 views
0

我想用grep获取包含定义词的行。我怎样才能用grep得到整个单词?

编辑:解决方案是this之一。

我知道我可以使用-w选项,但似乎没有办法。

例如:包含由标点符号分隔的我定义的单词的每个单词都包含在内。如果我找狗,它会告诉我,不仅含有狗字线也cats.dogs,猫,狗等

# cat file.txt 
some alphadogs dance 
some cats-dogs play 
none dogs dance 
few dog sing 
all cats.dogs shout 

而且使用grep:

# cat file.txt | grep -w "dogs" 
some cats-dogs play 
none dogs dance 
all cats.dogs shout 

所需的输出:

# cat file.txt | grep -w "dogs" 
none dogs dance 

你知道任何解决方法,可以让你得到整个单词吗?我已使用\ b或\ <对其进行了测试,结果为负面。

感谢, Eudald

+0

显示预期输出 – 123

+2

'用grep -w'显然不在这里@triplee工作,就不能复制到当前问题 – Inian

+1

'grep -w'因为标点和行尾字符的结束/开始被视为非单词字符;即使它工作的实施可能会非常缓慢 –

回答

1

用这个词边界锚,在grep任何版本已安装

grep '^dogs$' file.txt 

从这个regular-expressions页的摘录,

[..]锚不匹配任何字符。他们匹配一个位置。在字符串的开头^比赛,并且在字符串的末尾$比赛[..]

+0

你甚至用我提供的例子来测试它吗?它不起作用 –

+0

@eudald_v:你没有让我们知道你的样本更新,请参阅时间戳。没问题,你可以试试'grep'[[:space:]] dogs [[:space:]]'file',它可以解决你的问题。让我们知道它是否是 – Inian

+0

它只能解决示例,如果字符串之前有空格,则在示例中发生,但如果字符串位于句子的开始或结尾,则不会发生。无论如何,我再次编辑问题的答案我终于找到了作品。 –

1

-x参数尝试:

grep -x dogs file.txt 

grep手册:

-x,--line-regexp

只选择那些完全匹配整行的匹配项。 (-x由POSIX指定)。

注:cat是没用的,当你管本身的输出为grep

+0

你甚至用我提供的例子对它进行了测试吗?它不起作用 –