2012-06-23 8 views
13

私はあなたがLANGの値を設定することができ、このパターンgrep case sensitive [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]' 'は出力を生成しません。 grep '[S-T]'は 't'を出力します。一方、 'echo 't' | grep -o '[S-T]' 'は何も出力しません。どちらかというと混乱します。代わりに '[[:upper:]]'を使うと、範囲が '[A-Z]'の場合にこの問題を解決するようです。 – HelloGoodbye

答えて

7

使用すると、グロブと一致しているからパターンを防ぐために引用シェルによってファイルシステム内にファイルすること。 ''

大文字と小文字を区別して一致させるには、名前付き文字クラスを使用します。 [[: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-in-a-range-of-an-awk-rege)を参照してください。 –

5

grepに大文字と小文字を区別検索を取得することはできません。

$ 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