如果破折号是字符串,则grep -w不是唯一的

时间:2017-09-28 15:18:34

标签: linux bash grep

如果短划线在字符串中" grep -w"不是唯一的。我该如何解决这个问题?

示例:

File1中:

  

football01
football01test

# grep -iw ^football01
football01

文件2:

  

football01
football01-test

# grep -iw ^football01
football01
football01-test

2 个答案:

答案 0 :(得分:3)

这是预期的和记录在案的行为:

   -w, --word-regexp
          Select  only  those lines containing matches that form whole words.  The test is that the
          matching substring must either be at the beginning of the line, or preceded by a non-word
          constituent  character.   Similarly, it must be either at the end of the line or followed
          by a non-word constituent character.  Word-constituent characters  are  letters,  digits,
          and the underscore.

如果添加短划线,它会终止您的第一个单词,因为短划线是“非单词构成字符”。如果你把这些单词写在一起,那么word-regexp grep会将它视为一个单词并且不匹配它。

你想要做什么?

如果你只想知道你的线是否是football01而没有别的,你可以这样做

grep -i "^football01$"

如果你想获得别的东西,请你解释一下它是什么。

答案 1 :(得分:1)

-w开关用于单词regex。在file1中,football01test是一个单词,在file2中,football01和test是用连字符分隔的两个单词。

man grep对-w

说了这个
  

仅选择包含整体匹配的行   话。测试是匹配的子字符串必须在   该行的开头,或前面是非单词成分   字符。同样,它必须要么在结束时   行或后跟非单词构成字符。   单词构成字符是字母,数字和下划线。

由于football01football01test不匹配,因此您无法从grep获取该信息。

如果你要做grep -i ^football01 file1.txt,你会得到两行。