![正则表达式开头的“*”有什么作用?](https://linux22.com/image/85840/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%BC%80%E5%A4%B4%E7%9A%84%E2%80%9C*%E2%80%9D%E6%9C%89%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
在本例中讨论: find (GNU findutils) 4.5.11 grep (GNU grep) 2.20
假设我有一个包含一堆文件的目录。我想找到名为 jtobdops02.key 和 jtobdops.02.cer 的文件。
find . -regextype posix-extended -regex ".*jtobdops02\.(key|cer)"
给出:
./certs/jtobdops02.key
./certs/jtobdops02.cer
find . -type f | grep -E '.*jtobdops02.*(key|cer)'
还按预期给出:
./certs/jtobdops02.key
./certs/jtobdops02.cer
然而
find . -type f | grep -E '*jtobdops02.*(key|cer)'
给出这个:
./证书/jtobdops02.key
./证书/jtobdops02.cer
find 的人指出:
This is a match on the whole path, not a search.
grep 的 man 指出:
grep, egrep, fgrep - print lines matching a pattern
如果它们都进行匹配而不是搜索,为什么后者 grep 仍然有效?同样在后一种情况下,grep 没有前面的子表达式可以匹配,那么*
在这种情况下匹配什么?彩色(粗体)输出没有显示任何差异,所以我认为它什么也没做。这种情况下不应该报错吗?
其中哪一项是特质,哪一项是其他工具和语言的通用做法?