Что означает «*» в начале регулярного выражения?

В этом случае обсуждается: найти (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, чтобы соответствовать, так что же * соответствует в этом случае? Цветной (жирный) вывод не показывает разницы, поэтому я предполагаю, что он ничего не делает. Разве в этом случае не должно быть ошибки?

Какой из них является идиосинкразией, а какой является общей практикой для других инструментов и языков?

0
29.09.2017, 01:36
0 ответов

Теги

Похожие вопросы