Переменная Bash в переименованном регулярном выражении - PullRequest
0 голосов
/ 24 апреля 2018

Я пишу bash-скрипт для переименования имен файлов и использую команду

rename 's/\d+/sprintf("%02d", $&)/e' *

Но хотелось бы заменить "% 02d" на что-то вроде "% 0" $ var "d", таким образом, заменив '2' на $ var, но кажется, что это не работает, и я не очень хорошо разбираюсь в регулярных выражениях и как использовать escape \ и хотел бы помочь

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы также можете передать значение через окружение

env var=5 rename 's/\d+/sprintf("%0$ENV{var}d", $&)/e' *
0 голосов
/ 24 апреля 2018

Конечно, все ваше выражение находится в одинарных кавычках, где расширение не выполняется.Чтобы развернуть часть команды, переместите ее из кавычек:

rename 's/\d+/sprintf("%0'"$var"'d", $&)/e' *

Или поместите все выражение в двойные кавычки, но тогда вам нужно будет экранировать больше:

rename "s/\\d+/sprintf(\"%0${var}d\", \$&)/e" *
...