簡體   English   中英

與grep意外的正則表達式匹配

[英]Unexpected regex match with grep

我在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。)

在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 手冊頁

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM