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

Félix Hauri felix at f-hauri.ch
Mon Jul 23 14:33:55 CEST 2012


Soit une liste de fichier de languages en javascript:

$ ls lang.*.js
lang.de.js  lang.en.js  lang.fr.js  lang.it.js ...

qui contiennent une chaine par ligne encadrée par des guillemets et qui
sont parfoit en utf-8, parfois en html.

Le but est de les convertir toutes en html, mais pour chacun des fichiers.
(lancer recode directement sur les fichier .js n'est pas une bonne idée ;)

Je m'en suis tiré avec:
$ for file in lang.*.js ;do
    echo $file:
    cat $file |
	recode -f u8..flat |
	diff $file -
    done |
	env LANG=C sed -ne '
	    /^lang.*js:$/{h};
	    /^</{x;G;s/:\n< .*"\(.*\)".*$/\t\1/;p;s/\t.*$/:/;x;}
	' |
    while read file string;do
	printf "sed -i '%s' -e 's/%s/%s/'\n" $file "$string" "$(
	    echo $string|recode u8..html)"
	done |
    sed 's/\&/\\\&/g'

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.


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


More information about the gull mailing list