2015-04-03 3 views
1

Я хочу переименовать файлы с помощью регулярных выражений.Команда rename с регулярным выражением не работает

Например: заменить шаблон Mod[0-9][0-9] к Mod[0-9][0-9]_temp в файлах N_Mod10_m.bdf и N_Mod11_n.bdf с помощью следующей команды:

rename 's/\(.*Mod[0-9][0-9]\)\(.*\.bdf\)/$1_temp$2 * 

, но это не работает.

+0

вам не хватает закрытия ' '' в 'rename' команды. – fedorqui

+0

Также, если вы делаете '$ 1_temp', bash будет искать переменную' 1_temp'. Чтобы сказать, '$ 1' +' _temp', скажем '$ {1} _temp'. – fedorqui

+0

Вам нужно использовать нежелательный шаблон: '(. *?)', Я думаю, это то, что вы ищете: 'rename '/(.*? Mod [0-9] [0-9]) (. *? \. bdf)/$ 1_temp $ 2 '* '. Взгляните на http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html и http://unix.stackexchange.com/questions/19807/renaming-files- чтобы иметь-Строчные-расширения-с-переименованы. –

ответ

0

Вам необходимо использовать нежелательный шаблон: (.*?). Также добавьте недостающую цитату '.

Я думаю, это то, что вы ищете: rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/$1_temp$2' *.

Посмотрите на Rename Multiple Files in a Shell Prompt и Renaming files to have lower case extensions with rename.

Для CentOS, вы можете вставить _temp в имя файла, как это:

for i in *; do j=`echo $i | sed -r 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/\1_temp\2/g'`; mv "$i" "$j"; done 
+0

Это не работает. даже простая замена также не работает, например, переименовать xyz_d.txt в xya_d.txt, используя команду rename 's/xyz/xya /' *, но альтернативный способ, переименовать xyz xya * работает. – Manju

+0

Возможно 'rename '/(.*? Mod [0-9] [0-9]) (. *? \. Bdf) \ $ 1_temp $ 2 //' *' будет работать на вас? (Адаптация http://serverfault.com/questions/5685/renaming-files-in-linux-with-a-regex). Также см. Комментарий: «В Arch Linux это perl-rename». Является ли ваш Arch Linux? –

+0

Нет его centOS .. – Manju

Смежные вопросы