1。)我在虚拟盒子上使用Debian 8.4,并假设我有一个文本文件名sample.txt包含..
Linux.
Linux$
然后我运行了命令grep -w Linux sample.txt
,输出是
Linux.
Linux$
所以我想知道为什么它匹配那些行,因为我指定了-w选项,它应该只匹配确切的字符串?
答案 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.
也是如此。