Ceci est une ancienne révision du document !
encore une ébauche d’un mémo…
J’avais besoin d’extraite un nom de fichier dans un fichier index.html
sed c’est de la forme : ‘s/ce_qu’on_cherche/ce_qu’on_met_à_la_place/' (s pour substitution)
D’abord ce qu’on cherche avec ça (en rouge la version regexp) :
n’importe quoi, suivi d’une espace, suivi de url=' .* url='
on peut capturer un truc pour le ressortir avec \1 plus tard, d’où les parenthèses \( et plus loin \)
tout sauf ', plein de fois (quand tu mets [^c] ca veut dire tout sauf c) [^’]*
suivi de : ' puis d’autres caractères. On se simplifie la vie, on va juste dire “suivi de n’importe quoi” .*
d’où la regexp (sans les parenthèses) .* url='[^’]*.* et avec les parenthèses .* url=‘\([^’]*\).*
Si tu regardes ton nouveau truc que tu veux filtrer, tu vois qu’on passe de :
url=‘blablabla’
à :
url=“blablabla”
Il faut donc travailler avec des “ dans sed, au lieu des '. Donc on passe de : .* url=‘\([^’]*\).* à : .* url=“\([^”]*\).*
Evidemment pour que sed ne merde pas, il faut soit utiliser des \” au lieu des “ (sinon au premier ” sed va croire que la commande s’arrête là), soit utiliser des ' ' pour englober la commande, à la place des “ ”. Cette seconde solution est la plus simple.
Bilan : on passe de
sed -e “s/.*url=‘\([^’]*\).*/\1/”
à :
sed -e ‘s/.* url=“\([^”]*\).*/\1/'
Juste une inversion des types de guillemets en fait ;)