为什么“grep -w”匹配以“。”结尾的字符串。还是“$”?

时间:2016-04-20 12:45:56

标签: linux bash grep

1。)我在虚拟盒子上使用Debian 8.4,并假设我有一个文本文件名sample.txt包含..

Linux. 
Linux$

然后我运行了命令grep -w Linux sample.txt,输出是

Linux.
Linux$

所以我想知道为什么它匹配那些行,因为我指定了-w选项,它应该只匹配确切的字符串?

2 个答案:

答案 0 :(得分:3)

$.都是非单词构成字符,因此-w在两行中都匹配Linux,而不是其他内容。

man grep声明:

  

-w, - word-regexp

     

仅选择包含构成整个单词的匹配项的行。该   test是匹配的子字符串必须位于开头   该行,或前面是非单词构成字符。同样的,   它必须位于该行的末尾或后跟非单词   组成性质。 单词构成字符是字母,   数字和下划线。如果-x也是,则此选项无效   指定。

这意味着Linux将在所有情况下匹配,除了字母,数字和下划线之外,这些文本都被包围。

要查看grep匹配的确切内容,请使用-o仅打印匹配的部分:

$ echo "Linux.
Linux$" | grep -wo Linux
Linux
Linux

所以匹配的只是Linux

答案 1 :(得分:1)

选项-w具有匹配"整个单词"的语义。单词分隔符是字符类的变化,e。 G。从字母到符号或交互,因此x$在两个字符之间包含一个单词分隔符,x.也是如此。