2012-05-14 53 views
0

我在Ubuntu 10.10上使用GNU grep 2.6.3,並且正在爲即將到來的培訓課程準備好正確的正則表達式技巧,並在以下方面獲得意外打擊。與grep意外的正則表達式匹配

我有一個用下面的內容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)。

回答

1

grep命令之前添加LC_ALL=C,即

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

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

從grep的man-page

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]’. 
+0

由於弗雷德裏克。這觸及了頭部。 – user1393573

+0

很高興我能幫到你。歡迎來到SO,如果你喜歡答案,不要忘了投票並接受。閱讀常見問題。保持他們的帖子來臨 –