Различные базовые регулярные выражения 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'.