Outils pour utilisateurs

Outils du site


Panneau latéral

linux:sed (lu 52783 fois)

Ceci est une ancienne révision du document !


sed

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 ;)

linux/sed.1330205984.txt.gz · Dernière modification: 04-04-2013 22:05 (modification externe)