2010-11-22 2 views
0

Учитывая имя файла, например 'prefix.extension', я хотел бы найти все файлы шаблона prefix\.\d\d\.extension. Учитывая, что «префикс» или «расширение» может содержать литеральные строки, такие как .*, \n и т. Д., Единственный способ, которым я могу найти это правильно, - это избежать всех символов в «префиксе» и «расширении», помещая их до и после \.\d\d\., и egrep -в его. Есть ли более элегантный способ сделать это и/или простой способ избежать всех специальных символов для egrep в сценарии Bash?Безопасное найти файлы, соответствующие шаблону и литералам

Обратите внимание, что если обратная косая черта перед каждым символом изменит семантику некоторых, например \w.

+0

не уверен, что понял вопрос, несколько примеров было бы неплохо. Как насчет использования bashs filename globbing как «префикс ls. *. Extension»? –

+0

не будет глотать так легче, как регулярное выражение для этого? –

ответ

0

Оказывается grep --perl-regexp с \Q and \E делает то, что мне нужно:

ls -1N -- "${source_dir}" | grep -P "^\Q${source_base}.\E\d\{${fragment_digits}\}\Q.${source_extensions}\E\$" 
Смежные вопросы