找不到用于重命名的正确正则表达式

找不到用于重命名的正确正则表达式

我的 Ubuntu 服务器上存储了一些电视节目,我可以将它们全部重命名,以便 Kodi 可以识别它们,除了一个:

第一集,第一季:

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

第二季第一集:

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

所以Kodi认为第二个视频是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

我知道,这里有很多相关的问题,但没有一个符合这种模式,几乎没有人解释他的解决方案。的联机帮助页对rename我没有帮助

答案1

正则表达式匹配/^(.*) - (.*) - (.*) part([0-9]+)/将名称、剧集指示符、标题和零件编号分组,然后您可以在替换文本中使用$1它们$4

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

part1部分之后的任何内容(例如文件扩展名)都保持不变。

如果要修改捕获组,请e在表达式末尾使用修饰符s/…/…/。在 中,该部分是 Perl 表达式,而不是带有变量插值的字符串。在 Perl 表达式中,使用运算符连接字符串。例如,如果您想从零件号中减去 1:s/REGEX/REPLACEMENT/eREPLACEMENT.

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

相关内容