sed
substitution procura instâncias (todas as instâncias desde que você está usando g
) correspondentes ao primeiro argumento e substitui a correspondência completa pelo segundo argumento. Então, se você incluir “AIR” no primeiro argumento, ele será substituído - você precisa incluí-lo no segundo argumento se quiser mantê-lo. Quando sed
reclama de uma referência inválida, isso significa que você não definiu um grupo correspondente no primeiro argumento (usando \(
e \)
ou (
e )
desde que você tenha especificado -r
).
Como você está procurando por "AIR" seguido por qualquer caractere seguido por dígitos, sugiro o seguinte:
sed -r 's/AIR([^[:digit:]]*)([[:digit:]]+).jpg/AIRtest.jpg/g'
Isso substitui "AIR" por "AIR", qualquer non-digits com "test" e mantém todos os dígitos depois disso. Se você não precisar processar os caracteres entre "AIR" e os dígitos, poderá ignorá-los:
sed -r 's/AIR[^[:digit:]]*([[:digit:]]+).jpg/AIRtest.jpg/g'
Se você tiver o Perl rename
, poderá transpô-lo para renomear seus arquivos:
rename 's/AIR[^[:digit:]]*([[:digit:]]+).jpg/AIRtest.jpg/g' AIR*.jpg
ou
rename 's/AIR[^[:digit:]]*([[:digit:]]+).jpg/AIRtest$1.jpg/g' AIR*.jpg
( rename
prefere $
para referências de grupos).