bash переименование с использованием подстановки регулярных выражений - PullRequest
1 голос
/ 28 декабря 2010

У меня очень похожий вопрос, как для этого поста .

Я хотел бы знать, как переименовать вхождения в имени файла с назначенными заменами.например, если оригинальный файл называется: «быстрый коричневый быстрый коричневый fox.avi», я хотел бы переименовать его в «медленный красный медленный красный fox.avi».

я пробовал это:

new="(quick=>'slow',brown=>'red')"
regex="quick|brown"
rename -v "s/($regex)/$new{$1}/g" *

но без любви: (

Я также пытался с

regex="qr/quick|brown/"

, но это просто дает ошибки. Любая идея, что я делаю неправильно?

1 Ответ

0 голосов
/ 28 декабря 2010

Исходя из вашего примера, я думаю, что вам нужно несколько подстановок (не просто преобразование «быстрого коричневого» в «медленный красный», но преобразование списка слов в список новых слов. Вы можете разделить замены точкой с запятой. Вотрешение, которое работает для вашего примера:

rename -v 's/quick/slow/g;s/brown/red/g' *

И если вы действительно хотите использовать массив для сопоставления старых строк с новой строкой, вы можете втиснуть еще больше Perl в аргумент для переименования (но в какой-то момент вы можете написать скрипт Perl как отдельный скрипт):

rename -v '%::new=(quick=>"slow",brown=>"red");s/(quick|brown)/$::new{$1}/g' *
...