2013-04-04 77 views
1

我正试图在文件中找到确切的单词。这个词是在我试图找到它myServer上,文件内容为:Bash Grep确切搜索

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

尝试用grep的字边界:

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

编辑:看起来你不想把连字符作为单词边界。使用grep这样用于这一目的:

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

对不起,但仍返回两条线 – Sunshine 2013-04-04 16:38:36

+0

是的,它会因为连字符也被认为是一个字边界。 – anubhava 2013-04-04 16:39:02

+0

@阳光:请检查我编辑的答案。 – anubhava 2013-04-04 16:45:51

1

您可以使用\<\>识别开始和单词的结尾。因此,例如,如果给出\<myS为grep,将搜索以myS开头的单词。

当然,寻找一个确切的词,你会搜索这样的:

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

在大部分的尝试,你正在做的完全不相关的东西:

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

注意:您-w会正常工作。但是,你的“全字”定义似乎与POSIX认为的不同。

+0

不起作用:grep'\ 'test-file.txt 这是我的服务器,它很酷 这是我的服务器测试,它很酷 – Sunshine 2013-04-04 16:38:09

+0

@阳光,也许你应该定义你对“整个单词”的期望?对我来说(显然是POSIX标准)'myServer-test'中的'myServer'是一个完整的词。你想让它被空白分隔吗? – Shahbaz 2013-04-04 16:41:43

+0

我只希望能够搜索文件中的确切单词。对不起,如果我不清楚。显然,阿努哈夫已经提出了上述答案。谢谢 – Sunshine 2013-04-04 16:47:46

0

您可以使用\b这意味着一个单词边界:

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

对不起,这仍然导致两行 – Sunshine 2013-04-04 16:40:47