(
)
sed c´est le nom de la commande que nous allons utiliser. Mézakoikellesert ?
sed, pour Stream EDitor, sert à modifier un flux (comme son nom l´indique), en effectuant diverses opérations, spécifiées par l´espèce de *truc* qu´on voit après.
Maintenant, comment lire ce *truc*. Il faut séparer les trois parties :
s/ : c´est une commande spécifique à sed, qui indique que l´on va remplacer la première partie (de ce qui suit) par la deuxième
\/\(.*\)\.FOO/ : ça c´est très plaisant, c´est ce qu´on appelle une expression régulière. Son but est de rechercher (selon certaines règles bien entendu) l´expression qui suit. C´est universellement utilisé, et universellement pas compris (c´est le genre de truc qu´on préfère écrire que lire).
\/ sert à chercher le caractère "/". Pourquoi y´a-t-il un \ devant ? Parce que sinon, il serait compté comme un caractère spécial. L´anti slash devant sert à "échapper" à l´inteprétation en tant que commande du signe, c´est ce qu´on appelle un caractère d´échappement.
\( et \) : là j´ai bien peur que ça soit le contraire
c´est une commande spéciale propre à sed qui dit "Tout ce qui va être trouvé entre les parenthèses sera réutilisé plus tard" (nous verron quoi).
\. : comme pour le \/, ces deux caractères servent à en repérer un seul. En effet, vous allez voir juste en dessous que le point seul a une signification particulière, donc si on veut repérer un seul point, il faut encore une fois l´échapper.
FOO : le but de la commande est de renommer les fichiers qui se terminent par .FOO en .foo, donc il faut bien préciser que l´on ne cherche que les .FOO.
Revenons au contenu des parenthèses. Il s´agit des deux caractères . et * :
- Le premier indique "Tout caractère"
- Le second "Toute occurence"
En gros, cela indique que l´on cherche n´importe quel caractère, autant de fois que l´on veut (et éventuellement avec d´autres bien sûr). Ce qui fait que la signfication de la première partie de sed est "On cherche toute ligne qui commence par /, qui contient n´importe quel caractère jusqu´à sa fin en .FOO, sachant que la partie entre parenthèses pourra être réutilisée"
Note : vous noterez (peut-être, si vous suivez) qu´on ne réutilise pas le /, ce qui aurait pu être fait, en évitant ainsi de mettre un slash avant le `echo... Oui c´est un oubli de ma part, mais on va pas le dire, comme ça vous pourrez voir comment fonctionne la substitution des commandes entre ` `
Nous arrivons à la partie
\1.foo/
Qui est beaucoup plus simple. Le \1 est donc remplacé par ce que nous avons mis entre les parenthèses avant, et cette fois-ci on remplace le .FOO par un .foo
Note : cela semble aussi fonctionner avec les .FOO.zip, ce qui est étonnant et imprévu 