В этом случае обсуждается: найти (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)'
Дает следующее:
./ certs / jtobdops02.key
./ certs / jtobdops02.cer
Человек для поиска сообщает:
This is a match on the whole path, not a search.
Человек для grep утверждает:
grep, egrep, fgrep - print lines matching a pattern
Если они оба выполняют сопоставление, а не поиск, почему последний grep все еще работает? Также в последнем случае нет предшествующего подвыражения для grep, чтобы соответствовать, так что же *
соответствует в этом случае? Цветной (жирный) вывод не показывает разницы, поэтому я предполагаю, что он ничего не делает. Разве в этом случае не должно быть ошибки?
Какой из них является идиосинкразией, а какой является общей практикой для других инструментов и языков?