Не удается найти правильное регулярное выражение для переименования.

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

Первый эпизод, первый сезон:

Name - S01E001 - Title part1
Name - S01E001 - Title part2
Name - S01E001 - Title part3

Первый Эпизод, второй сезон:

Name - S02E020 - Title part1
Name - S02E020 - Title part2
Name - S02E020 - Title part3

Итак, Коди думает, что второе видео - это S02E20, но это S02E01. Шесть файлов должны быть после переименования:

Первый эпизод, первый сезон:

Name - S01E001.1 - Title
Name - S01E001.2 - Title
Name - S01E001.3 - Title

Первый эпизод, второй сезон:

Name - S02E001.1 - Title
Name - S02E001.2 - Title
Name - S02E001.3 - Title

Я знаю, что здесь много связанных вопросов, но ни один из них не подходит под этот шаблон, и почти никто не объясняет его решение. Справочная страница переименовать мне не помогает

0
18.06.2016, 17:21
1 ответ

Соответствие регулярному выражению / ^ (. *) - (. *) - (. *) Часть ([0-9] +) / заполняет название, индикатор эпизода, заголовок и номер детали в группах, которые затем можно использовать как $ 1 - $ 4 в тексте замены.

rename 's/^(.*) - (.*) - (.*) part([0-9]+)/$1 - $2.$4 - $3/' *

Все, что находится после части part1 , например расширение файла, остается без изменений.

Если вы хотите изменить группы захвата, используйте модификатор e в конце выражения s /… /… / . В s / REGEX / REPLACEMENT / e часть REPLACEMENT является выражением Perl, а не строкой с интерполяцией переменных. В выражении Perl используйте . оператор для объединения строк. Например, если вы хотите вычесть 1 из номера детали:

rename 's/^(.*) - (.*) - (.*) part([0-9]+)/"$1 - $2." . ($4-1) . " - $3"/e' *
1
28.01.2020, 02:48

Теги

Похожие вопросы