You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本修改:从多圆点文件名提取三位数字作为目录名

提取带前导零的三位数字作为目录名

针对你现在的文件名格式(如tma.h2s-2-pes-b97m-d4-tz.011.xyz),以下几种Bash原生或工具方法可以直接提取末尾的三位带前导零数字:

方法1:Bash参数扩展(推荐,无需外部工具)

利用Bash的字符串处理能力,分两步截取:

inputFile="tma.h2s-2-pes-b97m-d4-tz.011.xyz"
# 第一步:去掉末尾的.xyz后缀
baseName="${inputFile%.xyz}"
# 第二步:截取最后一个.之后的全部内容(即三位数字)
dirName="${baseName##*.}"
echo "$dirName"  # 输出:011
  • ${inputFile%.xyz}:从字符串末尾删除最短的.xyz匹配
  • ${baseName##*.}:从字符串开头删除最长的*.匹配,剩下的就是最后一个点后的三位数字

方法2:sed正则匹配

用sed的正则表达式直接捕获目标数字:

inputFile="tma.h2s-2-pes-b97m-d4-tz.002.xyz"
dirName=$(echo "$inputFile" | sed -E 's/.*\.([0-9]{3})\.xyz/\1/')
echo "$dirName"  # 输出:002
  • -E启用扩展正则,.*\.匹配任意字符直到最后一个点前,([0-9]{3})捕获三位数字,\.xyz匹配后缀,最后用\1替换为捕获的数字

方法3:grep正向预查匹配

用grep的Perl正则模式提取目标:

inputFile="tma.h2s-2-pes-b97m-d4-tz.003.xyz"
dirName=$(echo "$inputFile" | grep -oP '\d{3}(?=\.xyz$)')
echo "$dirName"  # 输出:003
  • -o只输出匹配的部分,-P启用Perl正则,\d{3}匹配三位数字,(?=\.xyz$)是正向预查,确保数字后面紧跟.xyz结尾

以上三种方法都能完整保留前导零,直接用于创建目录名。

内容的提问来源于stack exchange,提问作者isolated matrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:25:19