shell脚本在文件名中间添加前导零

时间:2015-11-06 20:23:36

标签: shell padding ksh leading-zero

我的文件名称为" words_transfer1_morewords.txt"。我想确保"转移"之后的数字。是五位数,如" words_transfer00001_morewords.txt"。我如何使用ksh脚本执行此操作?感谢。

2 个答案:

答案 0 :(得分:2)

只要您的单词 morewords 不包含数字,这将适用于任何Bourne类型/ POSIX shell:

file=words_transfer1_morewords.txt
prefix=${file%%[0-9]*}   # words_transfer
suffix=${file##*[0-9]}   # _morewords.txt
num=${file#$prefix}      # 1_morewords.txt
num=${num%$suffix}       # 1
file=$(printf "%s%05d%s" "$prefix" "$num" "$suffix")
echo "$file"

答案 1 :(得分:0)

使用ksh的正则表达式匹配操作将文件名分解为单独的部分,在格式化数字后将它们重新组合在一起。

pre="[^[:digit:]]+"  # What to match before the number
num="[[:digit:]]+"   # The number to match
post=".*"            # What to match after the number

[[ $file =~ ($pre)($num)($post) ]]
new_file=$(printf "%s%05d%s\n" "${.sh.match[@]:1:3}")

=~成功匹配后,特殊数组参数.sh.match包含元素0中的完全匹配,每个捕获组按顺序从元素1开始。