2013-04-04 82 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