Почему это регулярное выражение не работает на shell при использовании find - PullRequest
1 голос
/ 05 февраля 2020

Я использовал эту команду на linux

sudo find . -type f -regex "^\.\/\.git[\w-\/]+"

, чтобы найти файл .git-credential-cache/, но он ничего не возвращает, пока я пробовал это регулярное выражение с использованием (js), и он успешно работал и соответствует .git-credential-cache/.

1 Ответ

3 голосов
/ 05 февраля 2020

Кажется, тип регулярного выражения find не поддерживает \w в квадратных скобках. Фактически, ни один из поддерживаемых типов на моей машине не понимает этого:

touch a b c
for type in findutils-default awk egrep ed emacs gnu-awk grep posix-awk \
        posix-basic posix-egrep posix-extended posix-minimal-basic sed ; do
    find . -type f -regextype $type -regex '\./[\w]'
done
# No output.

Вы можете использовать класс POSIX типа posix-extended, хотя

find . -type f -regextype posix-extended -regex '\.\/\.git-[[:alnum:]/-]+'

Обратите внимание, что ^ бесполезно, поскольку регулярное выражение в любом случае должно соответствовать всему пути. Точно так же нет необходимости в обратном слэсе sh forward sla sh.

Кроме того, если файл, который вы ищете - .git-credential-cache/, это, вероятно, каталог, а не файл, поскольку имена файлов могут ' т в конце концов sh. -type f будет игнорировать каталоги, вместо этого используйте -type d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...