有这么四行数据
1.this line is empty
2.this line +empty
3.this line.empty
4.this lineempty
如果使用grep ‘line.*e’
来进行检索的话,四行数据都可以检索出来;
但是如果使用grep ‘line*.e’
来进行检索的话,则只能检索出后两行;
其实这还得从通配符.和*所表示的含义说起。
通配符 | 含义 |
---|---|
. | 匹配除了换行符以外任意一个字符 |
* | 前一个字符匹配0次或任意多次 |
那么,
grep ‘line.*e’
表示“line”后紧跟任意一个除换行符以外的字符,然后这个字符出现0次或者任意多次都可以,然后出现字符额,所以这四行数据都满足要求;
grep ‘line*.e’
表示“line”后出现0次或者任意多次的字母e,然后再紧跟任意一个除换行符以外的字符,之后再紧跟一个字母e。第一行line后0个e紧跟空格符,之后是i,不是e,所以不符合要求。第二行第一行line后0个e紧跟空格符,之后是+,不是e,所以也不符合要求。只有第三行和第四行是符合要求的。
对于正则表达式来说,单个通配符的意义看似容易理解,只有理解透彻才能明白他们组合起来所表达的真实意思。