如何在Bash中捕获正则匹配数字并批量修改文件名_XtoX数值
解决方案
可以用Bash的正则表达式匹配精准捕获文件名里的两个数字,计算递增后的值再拼接成新文件名,具体脚本如下:
for FILE in err*; do # 正则匹配捕获_XtoX部分的两个数字 if [[ $FILE =~ ^(.*_)([0-9]+)to([0-9]+)$ ]]; then prefix="${BASH_REMATCH[1]}" num1="${BASH_REMATCH[2]}" num2="${BASH_REMATCH[3]}" # 计算数字加20后的值 new_num1=$((num1 + 20)) new_num2=$((num2 + 20)) # 生成新文件名并重命名 new_FILE="${prefix}${new_num1}to${new_num2}" mv "$FILE" "$new_FILE" fi done
关键说明
- 正则
^(.*_)([0-9]+)to([0-9]+)$把文件名拆成三部分:BASH_REMATCH[1]:最后一个下划线前的全部内容(比如err_5JUP_N2_UUCCGU_)BASH_REMATCH[2]:to左侧的数字(比如1)BASH_REMATCH[3]:to右侧的数字(比如2)
- 用
$((...))完成整数加法运算,得到递增后的新数字 - 若怕误操作,可先把
mv换成echo,预览生成的新文件名是否正确
内容的提问来源于stack exchange,提问作者Pete Hwang
相关产品推荐
相关产品推荐

