Bash Grep精确搜索

时间:2013-04-04 16:34:01

标签: bash search grep

我想在文件中找到一个确切的单词。单词是myServer,我试图找到它的文件内容是:

This is myServer and it is cool
This is myServer-test and it is cool

以下是我尝试这样做的各种尝试的结果:

grep '^myServer$' test-file.txt
grep -Fx myServer test-file.txt

--> no results

grep -w myServer test-file.txt
grep -w myServer test-file.txt
grep '\<myServer\>' test-file.txt
grep '\bmyServer\b' test-file.txt
-->
This is myServer and it is cool
This is myServer-test and it is cool

我在这里错过了一些开关吗?

非常感谢。

3 个答案:

答案 0 :(得分:3)

尝试使用单词边界的grep:

 grep '\<myServer\>' test-file.txt

编辑:看起来您不想将连字符视为字边界。为此目的使用这样的grep:

grep -E '\<myServer\>([^-]|$)'  test-file.txt

答案 1 :(得分:1)

您可以使用\<\>来识别单词的开头和结尾。因此,例如,给予\<myS grep将搜索带有以myS开头的单词的行。

当然,要搜索确切的单词,您可以这样搜索:

grep '\<myServer\>' test-file.txt

在你的大部分尝试中,你都在做完全无关紧要的事情:

  • ^$匹配行的开头和结尾
  • -F搜索多个固定字符串
  • -x搜索与正则表达式相匹配的整行

注意:您的-w可以正常使用。但是,似乎您对“整个单词”的定义与POSIX的看法不同。

答案 2 :(得分:0)

您可以使用\b表示字边界:

rep '\bmyServer\b' test-file.txt