2012-06-23 20 views
13

我不能讓grep區分大小寫搜索這種模式grep區分大小寫[A-Z]?

$ grep 'T[A-Z]' test.txt 
The Quick Brown Fox Jumps Over The Lazy Dog 
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 
+0

這似乎是至少在某些版本的'grep'中的錯誤;當您在正則表達式中使用一系列字母時,搜索對所有字母不區分大小寫,但區域中的第一個字母不區分大小寫。例如。 'echo's'| grep'[S-T]''不會產生任何輸出,而'echo't'| grep'[S-T]''輸出't'。另一方面,'echo't'| grep -o'[S-T]''也不輸出任何內容,這有點令人困惑。使用'[[:upper:]]'似乎可以解決這個問題,當範圍是[A-Z]時。 – HelloGoodbye

回答

7

使用引號防止圖案被匹配的水珠通過shell在文件系統中進行文件歸檔。 ''

使用指定的字符類來保證區分大小寫的匹配。 [[:lower:]]

使用量詞來匹配多個字符。 \+

使用錨點來確保匹配的位置正確。 ^

grep '^T[[:upper:]]\+' test.txt 

之所以[A-Z]工作不適合你的是,你正在使用的語言環境是您的系統上實現的方式,該模式還包括小寫字母。

+1

@svnpenn:查看[this](http://unix.stackexchange.com/questions/15980/does-should-lc-collat​​e-affect-character-ranges)和[this](http://unix.stackexchange。 com/questions/19322/why-are-capital-letters-included-in-a-range-of-a-range-letters-in-an-awk-rege)來討論這些問題。 –

5

您可以設置LANG值:

$ LANG=C grep 'T[A-Z]' test.txt 
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 
1
grep 'T[[:upper:]]' test.txt 
grep 'T[ABCDEFGHIJKLMNOPQRSTUVWXYZ]' test.txt