Linux之通配符和正则表达式语系问题

今天在使用ls /usr/sbin/[A-Z]*过程中,发现会吧小写开头的文件也列出来,如下:

/usr/sbin/biosdecode                  /usr/sbin/pm-suspend
/usr/sbin/brctl                       /usr/sbin/pm-suspend-hybrid
/usr/sbin/build-locale-archive        /usr/sbin/postalias
/usr/sbin/cacertdir_rehash            /usr/sbin/postcat
/usr/sbin/capsh                       /usr/sbin/postconf

 搞了一通,原来是语系的问题,发现在即的语系是zh_CN.gb2312,语系改为C就好了。

 大家都知道,计算机中只有0和1,计算机中的字符都是由编码转换表得来的,由于语系编码不同,就会造成数据选取结果不同。C语系和zh_CN的输出为:

 LANG=C时,0 1 2 3 4 ... a b c .... A B C

 LANG=zh_CN时,0 1 2 3 4... a A b B c C....

 所以,当你通配符实[a-z]时,范围是 a A b B ....当然就会把小写的字符也选取出来了。

 但是在测试正则表达式,虽然语系是zh_CN,也不会出现如上问题。但是在看《鸟哥linux》说使用正则表达式,也要注意语系问题,测试过,也没有问题啊,测试如下:

文本内容:cat hello.txt 
aaaaaaaa
Bbbbbbbb
cccccccc
11111111

获取内容命令:
grep -n "^[a-z]" hello.txt 
1:aaaaaaaa
3:cccccccc

猜你喜欢

转载自chenghao666.iteye.com/blog/2421544