Regex переименовывает имя файла с помощью команды rename linux - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь переименовать файл first_second.pdf в first_0second.pdf

Итак, я прочитал о захвате и обратной ссылке. Но как-то это не работает. Может кто-нибудь сказать мне, что я делаю не так?

rename 's/\(.*_\)\([1-9]\).pdf$/$10$2.pdf/' first_1.pdf

Я ожидаю, что first_1.pdf будет переименован в first_01.pdf

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Проблема заключалась в том, что у нее был escape-символ и фигурные скобки, окружавшие обратные ссылки. Это потому, что внутреннее переименование использует posix-extended. Экранирующий символ был бы необходим, если бы для переименования использовался posix-basic в качестве regextype.

Удалив escape-символы и добавив фигурные скобки для обратных ссылок, выражение regex сработало.

rename 's/(.*_)([1-9]).pdf$/${1}0${2}.pdf/' first_1.pdf
0 голосов
/ 18 января 2019

Аргумент -n показывает вам, что он собирается делать, фактически не делая этого, что хорошо для тестирования. Подберите и запишите первую часть вплоть до подчеркивания. Затем сопоставьте и запишите 1 или более чисел, за которыми следуют буквальная точка и все остальное до конца строки. Замените первой захваченной группой (скобки вокруг номера группы, чтобы отделить его от литерала '0'), литерал '0', а затем 2 оставшиеся захваченные группы.

rename -n 's/(.*_)([0-9]+)(\..*)$/${1}0$2$3/' first_1.pdf

rename(first_1.pdf, first_01.pdf)
...