2009-04-25 38 views
2

我有一個大文件,其中每行包含一個子字符串,如ABC123。如果我執行basic grep

grep ABC file.txt 

grep ABC1 file.txt 

我得到這些線回不如預期,但如果我執行

grep ABC12 file.txt 

的grep未能找到相應的線路。

這似乎很平凡的功能,但我不是grep的重度用戶,所以也許我錯過了一些問題。

+0

所以,讓我檢查我的理解。包含ABC123的文件中有幾行。當你用ABC或ABC1運行grep時,你會得到這些行;當你運行grep ABC12時,你不會收回那些行嗎?這是相當不可能的 - grep將使用長正則表達式,並且5或6個字符不會太長。假設「試點錯誤」。哪個平臺?哪個版本的grep? (你是對的,你所做的只是微不足道的,我的懷疑必須是該文件不包含你認爲它的作用。) – 2009-04-25 15:49:08

+0

請從一些實際的文件中複製和粘貼**的一些示例數據和命令**以及用於重現問題的命令。 – 2009-04-25 16:09:38

+1

該文件確實包含2至3個字符之間的不可顯示字符,否則不會顯示。事後看來,這應該是明顯的解釋。 od實用程序在這裏證明非常有用。 – user14128 2009-04-25 17:09:17

回答

5

使用類似

od -x -a < filename 

傾倒了該文件的內容以十六進制。這將立即告訴你,你的文件中有什麼是你期望的。我懷疑它不是:-)

注:od有很多有用的選項來幫助你在這裏。事實上,列舉的人太多了。

0

這沒有意義。你確定該文件包含「ABC123」嗎?

您可以通過在shell中運行以下命令

echo "ABC123" | grep ABC12 
0

如果行包含ABC123驗證這一點,那麼的「grep ABC12」應該得到他們。你是否想要匹配幾種不同的字符串,比如ABC1,ABC2和ABC3?在這種情況下,你可以試試這個:

grep -E 'ABC1|ABC2|ABC3' 
0

我不知道是什麼問題.. grep究竟做了它應該。例如,我的測試文件的內容:

$ cat file.txt 
ABC 
ABC1 
ABC12 
ABC123 

..和grep'ing爲ABC,ABC1,ABC12,ABC123:

$ grep ABC file.txt 
ABC 
ABC1 
ABC12 
ABC123 
$ grep ABC1 file.txt 
ABC1 
ABC12 
ABC123 
$ grep ABC12 file.txt 
ABC12 
ABC123 
$ grep ABC123 file.txt 
ABC123 

grep基本上是一個過濾器,包含第一參數(ABC,或ABC1等)的任何線將被顯示。如果它不包含整個字符串,則不會顯示

3

有沒有可能您的文件包含某些隱藏字符,例如0x00?