Различные базовые регулярные выражения POSIX в find и grep?

Мне нужно использовать команду GNU find, чтобы найти файлы шаблона, описанного POSIX BRE ниже:

"_[[:digit:]]*.txt"

(подчеркивание, за которым следует любое количество цифр, после которых следует точка, за которой следует "txt")

Когда имена целевых файлов помещены в один текстовый файл, я могу успешно выбрать интересующие их имена, используя grep с вышеупомянутым RE. Однако find с помощью --regextype posix-basic не находит совпадений.

Например:

$ touch 1.txt _2.txt _3_r.txt _3.txt 3.txt
$ for i in $(ls); do echo $i >> files.txt; done
$ grep "_[[:digit:]]*.txt" files.txt
_2.txt
_3.txt
$ find . -regextype posix-basic -regex "_[[:digit:]]*.txt"
$

Имеют ли grep и find другой синтаксис для BRE POSIX? Как мне тогда создать RE, чтобы выбрать интересующие имена файлов (_2.txt и _3.txt в примере).

2 ответа

Решение

Согласно регулярному выражению из man find:

Это совпадение на всем пути, а не поиск. Например, чтобы сопоставить файл с именем "./fubar3", вы можете использовать регулярное выражение ".* Bar." или `.*b.*3', но не`f.*r3'.

Попробуйте использовать \d вместо [:digit:]

Другие вопросы по тегам