Je devais renommer des fichiers pour retirer un mot à l’avant et transformer l’extension du fichier. Il me fallait passer de 2009_nomdevoyage_numerophoto.jpg à nomdevoyage_numerophoto_w.jpg
Sur des forums, on trouve des choses à base de sed, assez incompréhensible comme

i=2009_nomdevoyage_numerophoto.jpg ; echo $i|sed 's/[^_]*_//;s/.jpg/_w.jpg/'


Une solution sympa pour faire ce travail serait d’utiliser uniquement le shell. Voici une possibilité, avec zsh, puis avec bash.

<endymion@sol-draconi(0):/tmp>
zsh/3 1273 % i=2009_nomdevoyage_numerophoto.jpg ; echo ${${i#2009_}%jpg}_w.jpg
nomdevoyage_numerophoto._w.jpg
[dim. 09/06/07 23:28 CEST][pts/5][i686/linux-gnu/2.6.29.4][4.3.10]
<endymion@sol-draconi(0):/tmp>
zsh/3 1274 % bash
bash-4.0$ i=2009_nomdevoyage_numerophoto.jpg ; echo ${${i#2009_}%jpg}_w.jpg
bash: ${${i#2009_}%jpg}_w.jpg : mauvaise substitution
bash-4.0$ i=2009_nomdevoyage_numerophoto.jpg ; j=${i%.jpg}_w.jpg ; echo ${j#2009_}
nomdevoyage_numerophoto_w.jpg
bash-4.0$


Je vous laisse deviner quelle solution a ma préférence