[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Modification de fichiers texte et gestion des caractères spéciaux avec sed, awk, perl



Vendredi 21 juillet 2006, 15:40:52 CEST, Eric Veiras Galisson a écrit :
>[...] 
> si je lance avec awk cette commande :
> 
> $ awk '#<a href="http://mon.domaine.tld/informatique/services.html";
> class=lienTitre>Services</a># {print $1"\n<a
> href="http://wiki.domaine.tld/wiki"; class=lienTitre>Wiki</a>"}'
> fichier.html
> 
> je n'ai aucun message d'erreur mais aucune modification non plus de mon
> fichier

awk attend forcément un / pour une regexp, comme tu lui donnes #, il
prend ça pour une expression. Voir le manuel de awk, je m'en sers
rarement avec des expressions complexes.

> (j'ai suivi ton conseil et remplacé mon ! par #, parce qu'avec le !
> j'avais des messages d'erreur... ce n'était pas une bonne idée
> d'utiliser ce symbole...)

Normal, en bash (et autres sh), ! sert pour la gestion d'historiques.
(Et, s'il est « simple-quoté », c'est l'opérateur non.)
 
> Avec sed
> $ sed -ei '#<a href="http://mon.domaine.tld/informatique/services.html";
> class=lienTitre>Services</a># a<a href="http://wiki.domaine.tld/wiki";
> class=lienTitre>Wiki</a>' fichier.html

Sed peut prendre d'autres caractères que / comme marqueur de regexp, si
on suit ces règles :
- après une commande, aucun problème (p.ex. 's:a:b:' est pareil que
  's/a/b/) ;
- avant une commande (c'est-à-dire comme adresse), il faut protéger le
  premier : '/a/,/b/ s/x/y/' peut devenir '\:a:,\,b, s!x!y!' 

> Par contre, si j'utilise perl
> 
> $ perl -pi.bak -e 's#(<a
> href="http://mon.domaine.tld/informatique/services.html";
> class=lienTitre>Services</a>)#$1<BR>\n<a
> href="http://wiki.domaine.tld/wiki"; class=lienTitre>Wiki</a>#g'
> test.html
> 
> là, ça marche bien, donc mon problème est résolu, mais j'aurais
> néanmoins aimé pouvoir le faire avec sed et awk.

Je ne connais pas bien perl mais sans doute est-ce parce que tu places la
regexp après la commande 's' (comme cela fonctionnerait avec sed (sauf
que non à cause du saut ligne)).

-- 
 Sylvain Sauvage



Reply to: