2013-10-09 6 views
0

мне нужно использовать GNU найти команду для того, чтобы найти файлы шаблона, описываемого POSIX BRE ниже:Различные POSIX Основные регулярные выражения в поиске и grep?

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

(подчеркивание следует любое количество цифр с последующим периодом с последующим «.txt»)

Когда имена целевых файлов помещаются в один текстовый файл, я могу успешно выбрать заинтересованные, используя grep с вышеупомянутым RE. Однако найти с --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 и найти имеют разный синтаксис для POSIX Brès? Как мне затем построить RE, чтобы выбрать интересующие имена файлов (_2.txt и _3.txt в примере).

+0

В стороне, это [бесполезное использование 'ls'] (http://partmaps.org/era/unix/award.html) - вы имеете в виду' for i in *; do ... 'или несколько больше ad-hoc' ls -1> files.txt'. – tripleee

ответ

2

Согласно регулярок сечение от man find:

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

-1

Попробуйте использовать \ D вместо [: цифры:]

+0

Тот же результат. BTW _-regextype grep_ тоже не работает. – Student4K