在本例中讨论: 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 没有前面的子表达式可以匹配,那么*
在这种情况下匹配什么?彩色(粗体)输出没有显示任何差异,所以我认为它什么也没做。这种情况下不应该报错吗?
其中哪一项是特质,哪一项是其他工具和语言的通用做法?