如何结合sed与mv工具通过正则批量重命名指定BUSCO相关文件?
没问题,这事儿用sed配合mv做批量重命名很轻松!我给你一套直接能用的方案,还会拆解每个部分帮你理解:
完整批量重命名命令
切换到目标文件所在的目录,直接运行这个bash循环:
for file in BUSCO_Canis_lupus_BUSCO_v3_*; do new_name=$(echo "$file" | sed -E 's/^BUSCO_(.*)_BUSCO_v3_[0-9A-F]+_(.*)$/\1_\2/') mv "$file" "$new_name" done
命令拆解说明
循环遍历文件:
for file in BUSCO_Canis_lupus_BUSCO_v3_*会匹配所有以BUSCO_Canis_lupus_BUSCO_v3_开头的文件,如果你还有其他类似命名的文件,也可以改成更通用的BUSCO_*来匹配所有开头是BUSCO_的文件(不过指定前缀更安全,避免误改其他文件)。用sed生成新文件名:
sed -E:启用扩展正则表达式模式,让写法更简洁- 正则
s/^BUSCO_(.*)_BUSCO_v3_[0-9A-F]+_(.*)$/\1_\2/的作用:^BUSCO_:精准匹配文件名开头的BUSCO_(.*):捕获第一个核心部分(也就是你要保留的Canis_lupus)_BUSCO_v3_[0-9A-F]+_:匹配中间要删除的部分——_BUSCO_v3_加上一串数字/字母(你的例子里有类似451441E0的十六进制字符,所以用[0-9A-F]+覆盖所有可能)(.*)$:捕获最后一部分(比如exon_probs.pbl、parameters.cfg)\1_\2:把两个捕获到的有效部分用下划线拼接,得到最终的新文件名
安全测试小技巧
在实际执行mv之前,你可以先预览一下重命名结果,避免出错:
for file in BUSCO_Canis_lupus_BUSCO_v3_*; do echo "$file" → $(echo "$file" | sed -E 's/^BUSCO_(.*)_BUSCO_v3_[0-9A-F]+_(.*)$/\1_\2/') done
确认所有输出的新文件名都符合你的预期后,再把echo换成mv就行啦!
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

