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
相关产品推荐
相关产品推荐

