拆分字符串并重新格式化:
#!/usr/bin/env bash
oldname='foo-353-03-53-23.txt'
IFS=- read -r -d '' a n b <<<"$oldname"
printf -v newname '%s-%06d-%s' "$a" "$((10#$n))" "${b%?}"
# Debug dump variables
declare -p oldname newname
使用Bash的Regex捕获字符串elmeents的替代方法:
#!/usr/bin/env bash
oldname='foo-353-03-53-23.txt'
# Capture string elements with Regex
[[ $oldname =~ ([^0-9]+)([0-9]+)(.*) ]]
# Reformat string elements
printf -v newname '%s%06d%s' \
"${BASH_REMATCH[1]}" "$((10#${BASH_REMATCH[2]}))" "${BASH_REMATCH[3]}"
if [ ! -e "$newname" ]; then
echo mv --no-clobber -- "$oldname" "$newname"
else
printf 'Cannot rename %s to %s, because %s already exist!\n' \
"$oldname" "$newname" "$newname" >&2
fi