加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 重命名文件时替换并添加前导零

发布时间:2020-12-14 06:04:49 所属栏目:百科 来源:网络整理
导读:请耐心等待,这个帖子会有点长… 我有一堆文件,其中一些文件名称简洁明了(例如1E01.txt),还有一些文件有很多额外内容: Sample2_Name_E01_-co_032.txtSample2_Name_E02_-co_035.txt...Sample12_Name_E01_-co_061.txt 等等.这里重要的是“Sample”之后的数字和
请耐心等待,这个帖子会有点长…

我有一堆文件,其中一些文件名称简洁明了(例如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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读