有這麼四行數據
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,所以也不符合要求。只有第三行和第四行是符合要求的。
對於正則表達式來說,單個通配符的意義看似容易理解,只有理解透徹才能明白他們組合起來所表達的真實意思。