Найти с параметром регулярного выражения из переменной - PullRequest
1 голос
/ 14 марта 2012

Я хочу создать скрипт, который использует find следующим образом:

find . -regex $1 | while read prom; do
    echo $prom
done

Я хочу получить регулярное выражение из опции, но я не могу заставить это работать. Я попытался использовать некоторое регулярное выражение (f. E. ". * (Txt) §") direct вместо $ 1, но это не помогло. Что я забыл об использовании find?

1 Ответ

3 голосов
/ 14 марта 2012

Есть ли причина, по которой у вас есть скобки?Попробуйте .*txt$ в качестве регулярного выражения (а не этот забавный «символ раздела» в вашем вопросе).

Если вы хотите, чтобы скобки (как в скобках для захвата?), Вам нужно сделать .*\(txt\)$, потому что по умолчаниюТип регулярного выражения для find - это стиль Emacs, в котором () равны литерал и должны быть экранированы для интерпретации в их смысле регулярного выражения.

Вы также можете сделать find . -regextype posix-extended -regex '.*(txt)$'отметив -regextype posix-extended, который изменяет регулярное выражение на расширенное регулярное выражение POSIX, где () - это специальные символы (find -regextype asdf обычно выдаст вам сообщение об ошибке, в котором перечислены все параметры, которые вы можете ввести для regextype).

Кроме того, в вашем bash-скрипте вы должны заключать $1 в кавычки:

find . -regex "$1"

(Если $1 уже не заключено в кавычки вокруг него, вв каком случае игнорировать предложение).

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