一直对正则表达式了解不多,今天又碰到一个奇怪的问题,看如下例子
[root@devserver ~]# echo application |grep k*n
application
随即从百度百科看了仔细用法:
*
|
匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
|
对例子中的zo*能匹配z仔细体会,终于明白了*号前面的字母任意次。因此在之前的例子中是对的。
[root@devserver ~]# echo application | grep a*n application [root@devserver ~]# echo application | grep ap*n //只能匹配 an apn appn appppn [root@devserver ~]# echo application | grep ap.*n //这里.表示任意字符,因此.*是可以表示中间的任意字符 application [root@devserver ~]# echo application | grep app.*n //同上 application
[root@devserver ~]# echo application | grep a.*n application [root@devserver ~]# echo application | grep a[a-z]*n application [root@devserver ~]# echo application | grep a[a-z1-9]*n application使用:lower:替换.*,也都是可以的
[root@omsdevserver ~]# echo application | grep app[[:lower:]]*n application [root@omsdevserver ~]# echo application | grep app[[:upper:]]*n [root@omsdevserver ~]# echo application | grep app[[:upper:][:lower:]]*n application
[root@omsdevserver ~]# ls in*log install.log install.log.syslog但是我们从来不会用查找install.log文件
[root@omsdevserver ~]# ls ik*log
After word splitting, unless the -f option has been set (see Section 2.3.2), Bash scans each word for the characters "*", "?", and "[". If one of these characters appears, then the word is regarded as a PATTERN, and replaced with an alphabetically sorted list of file names matching the pattern
原文:http://blog.csdn.net/xfzheng_yeah/article/details/18599867