Pad valores numéricos no nome do arquivo com três dígitos usando sed
Estou passando um nome de arquivo para o meu script bash e limpando o nome usando sed. Alguns arquivos de exemplo seriam:
Test 01.txt
Test v2 01.txt
Gostaria de voltar:
Test 001.txt
Test v002 001.txt
Aqui está o meu script
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $@
do
j=`basename "$f" ".???"`
BASENAME=`basename "$f" ".???"`
DIRNAME=`dirname "$f"`
j=`echo $j |sed -e 's/\///g'`
j=`echo $j |sed -e 's/_/ /g'`
j=`echo $j |sed -e 's/^\.//'`
j=`echo $j |sed -e 's/\[[^()]*\]//g'`
j=`echo $j |sed -e 's/([^()]*)//g'`
j=`echo $j |sed -e 's/#//g'`
j=`echo $j |sed -e 's/+/\ /g'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e 's/\&/and/g'`
j=`echo $j |sed -e 's/\ -/-/g'`
j=`echo $j |sed -e 's/-\ /-/g'`
j=`echo $j |sed -e 's/-{2,}/-/g'`
j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $@
do
j=`basename "$f" ".???"`
BASENAME=`basename "$f" ".???"`
DIRNAME=`dirname "$f"`
j=`echo $j |sed -e 's/\///g'`
j=`echo $j |sed -e 's/_/ /g'`
j=`echo $j |sed -e 's/^\.//'`
j=`echo $j |sed -e 's/\[[^()]*\]//g'`
j=`echo $j |sed -e 's/([^()]*)//g'`
j=`echo $j |sed -e 's/#//g'`
j=`echo $j |sed -e 's/+/\ /g'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e 's/\&/and/g'`
j=`echo $j |sed -e 's/\ -/-/g'`
j=`echo $j |sed -e 's/-\ /-/g'`
j=`echo $j |sed -e 's/-{2,}/-/g'`
j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",$&)/e'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e "s/\'//g"`
j=`echo $j |sed -r -e 's/ {2,}/ /g'`
j=`echo $j |sed -e 's/\ \././g'`
if [ "$BASENAME" != "$j" ]; then
mv -v "$f" "$DIRNAME"/"$j"
fi
done
amp;)/e'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e "s/\'//g"`
j=`echo $j |sed -r -e 's/ {2,}/ /g'`
j=`echo $j |sed -e 's/\ \././g'`
if [ "$BASENAME" != "$j" ]; then
mv -v "$f" "$DIRNAME"/"$j"
fi
done
Aqui está a linha do problema
j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",$&)/e'`
amp;)/e'`
O regex funcionará com renomeação, mas não com se