[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



Si je comprends bien, avec awk et sed, c'est super difficile de faire
des manips sur des chaines aussi compliquées et vu que je connais un
peu perl et que je l'utilise sur des machines ou il est présent
(debian !), il faut mieux que j'utilise perl ?

Bon, je regarderais dans les manuels avancés de sed et awk voir si je
trouve (et comprends :) comment manipuler des chaines aussi
compliquées.
En attendant je vais utiliser perl, et vous remercie de votre aide.



On 7/21/06, Sylvain Sauvage <Sylvain.Sauvage@metanoesis.net> wrote:
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


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org




--
Eric Veiras Galisson



Reply to: