我的文件名称为" words_transfer1_morewords.txt"。我想确保"转移"之后的数字。是五位数,如" words_transfer00001_morewords.txt"。我如何使用ksh脚本执行此操作?感谢。
答案 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开始。