[英]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.