regex - 重命名文件时替换和添加前导零

标签 regex perl bash rename

请耐心等待,这篇文章会有点长......

我有一堆文件,其中一些文件的名称简单明了(例如 1E01.txt),还有一些文件有很多额外内容:

Sample2_Name_E01_-co_032.txt
Sample2_Name_E02_-co_035.txt
...
Sample12_Name_E01_-co_061.txt

等等。这里重要的是“Sample”后面的数字和“Name”后面的字母+数字——其余的都是一次性的。如果我去掉不重要的部分,文件名将减少为与“干净”文件名相同的模式(2E01.txt、2E02.txt、...、12E01.txt)。我已经设法用以下表达式重命名文件(我自己想出了这个,不知道是否很优雅但工作正常):

rename -v 's/Sample([0-9]+)_Name_([A-Z][0-9]+).*/$1$2\.txt/' *.txt

现在,第二部分是为只有一位数字的文件名添加前导零,例如 1E01.txt 变成 01E01.txt。我已经设法做到了这一点(在另一个 StackExchange 帖子上找到并修改了它):

rename -v 'unless (/^[0-9]{2}.*\.txt/) {s/^([0-9]{1}.*\.txt)$/0$1/;s/0*([0-9]{2}\..*)/$1/}' *.txt

所以我终于回答了我的问题:有没有办法在一个重命名命令中合并两个表达式?我知道我可以做一个 bash 脚本来自动化这个过程,但我想要的是找到一个一次性重命名解决方案。

谢谢

最佳答案

您可以尝试使用此命令将 1-file.txt 重命名为 0001-file.txt

# fill zeros
$ rename 's/\d+/sprintf("%04d",$&)/e' *.txt

您可以稍微更改命令以满足您的需要。

关于regex - 重命名文件时替换和添加前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250694/

相关文章:

c# - 正则表达式不允许连续 3 个字符

perl - 无法为 RHEL 安装 DBI.pm 和 DBD.pm 来运行 perl 脚本

perl - 增量的误区

perl - perl IO::Socket::SSL 支持 SSLKEYLOGFILE 吗?

python - 接收 bool 结果以查看 crontab 是否存在

linux - 使用 heredoc 输入时 Bash 返回码错误处理

java - 如何在 Android Java 中合并正则表达式中的两个或多个条件?

多行电子邮件地址的正则表达式?

Java 正则表达式包括字母表中的所有字母,除了某些字母

bash - 重命名文件扩展名而不指定