正则表达式用名称中的字母替换(某些)数字

时间:2017-09-29 20:29:15

标签: regex perl replace batch-rename

我有一个文件列表:

file1_1.pdf file1_2.pdf file1_3.pdf

但是,我希望将它们重命名为

file1_a.pdf file1_b.pdf file1_c.pdf

我想知道如何用文件名中的数字替换字母(我使用rename perl脚本,它依赖于标准的regexp);不幸的是,tr没有任何帮助,因为它会替换我不想要的数字。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

rename 's/_\K(\d+)(?=.pdf$)/chr ((ord "a") + $1 - 1)/e' *.pdf
  • 替换运算符的e选项用于将数字转换为小写字符,有关s///e运算符的详细信息,请参阅perlop
  • 为避免删除数字前面的下划线,我们使用零宽度lookbehind断言\K,有关详细信息,请参阅perlre
  • 为避免删除数字后面的.pdf延伸,我们使用(?=pat)零宽度正向前瞻断言,另请参阅perlre