今天在使用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