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

Regexp replace (some) numbers with letters in names

我有一个文件列表:

file1_1.pdf file1_2.pdf file1_3.pdf

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

file1_a.pdf file1_b.pdf file1_c.pdf

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

您可以尝试这样的操作:

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