0

私は Ubuntu 10.10 で GNU grep 2.6.3 を使用しており、次のトレーニング コースに備えて正規表現のスキルを磨いています。

次の内容のstrings.regex.txtという名前のファイルがあります。

STRING1   Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING2   Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)

このgrepコマンド:

grep 'x[0-9A-Z]' strings.regex.txt

結果:

STRING1   Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING2   Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)

私はこれを結果として期待していました:

STRING2   Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)

上記の結果が得られた理由を誰かが説明できますか? grep 出力の最初の行には、正規表現 x[0-9A-Z] の一致が含まれていません。x[0-9a-z] または x[0-9A-Za-z] または他の多くの正規表現に一致します。正規表現を学び、理解する方法。一致していないはずです。

いくつかの追加の grep コマンドと結果の出力を次に示します。

grep -o 'x[0-9A-Z]' strings.regex.txt 
x2

(私はこれを期待しており、正規表現に関する私の現在の理解をサポートしています。)

grep -oc 'x[0-9A-Z]' strings.regex.txt 
2

(私はこれを期待していませんでした。私は1を期待していました。)

grep -c 'x[0-9A-Z]' strings.regex.txt 
2

(私はこれを期待していませんでした。私は1を期待していました。)

4

1 に答える 1

1

LC_ALL=Cgrep コマンドの前に a を追加します。

$ grep -c 'x[0-9A-Z]' strings.regex.txt
2

$ LC_ALL=C grep -c 'x[0-9A-Z]' strings.regex.txt
1

grepマンページから

LC_ALL
LC_COLLATE
LANG
    These variables specify the locale for the LC_COLLATE category,
    which determines the collating sequence used to interpret range
    expressions like ‘[a-z]’. 
于 2012-05-14T14:07:32.670 に答える