[gull] Truc et astuces: Modifier plusieur fichier avec sed

Félix Hauri felix at f-hauri.ch
Tue Jul 24 10:23:16 CEST 2012


Merci Cédric,

On Mon, Jul 23, 2012 at 02:53:54PM +0200, Cédric Bouvier wrote:
> Le Monday 23 July 2012, à 14 heures 33, Félix Hauri écrivait :
> > ...
> > qui contiennent une chaine par ligne encadrée par des guillemets et qui
> > ...
> > 	    /^</{x;G;s/:\n< .*"\(.*\)".*$/\t\1/;p;s/\t.*$/:/;x;}
> > ...
> > sed -i 'lang.de.js' -e 's/Hinzufügen/Hinzuf\&uuml;gen/'
> > sed -i 'lang.de.js' -e 's/Geändert/Ge\&auml;ndert/'
> > sed -i 'lang.fr.js' -e 's/Création/Cr\&eacute;ation/'
> > ... Que je peux piper vers sh (`` | /bin/sh '') après vérification.
> 
> Je ne suis pas sûr d'avoir tout compris,
Le but est de ne traiter, via shell et recode, que la partie entre guillemets.

> mais il doit y avoir plus simple, non ?
J'ai bien pensé que je pourrai faire plus simple avec Perl,
mais à ce point là, c'est impressionnant!

> perl -MHTML::Entities -Cio -pi.bak -e '$_=encode_entities($_, "\200-\377")' *.js

J'ai apris plein de trucs basiques, en lisant cette ligne:
 - man perlrun
   = Je n'ai jamais utilisé ``-C'', bonne info!
   = N'avais pas clairement relevé les possibilités de -p (avec -i;):
       ``...loop around your program, which makes it iterate over
         filename arguments...''
 - info sed
   = tiens, sed peut le faire aussi!? ``sed -i.bak lang*.js''
 - man HTML::Entities
   = Cela fait très longtemps que j'ai essayé ce module... Je n'ai
     pas dû le faire suffisament en profondeur!

(Et donc, peut faire un poil plus court: ``$_='' est souvent implicite ;)

perl -MHTML::Entities -Cio -pi.bak -e 'encode_entities($_,"\200-\377")' lang*.js

Bon, je retourne me coucher...

--
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list