Tym-Project

From: SUPINFO
To: Tous
Subject: IT

SED, Trucs Et Astuces Pour Le Remplacement Et La Mise en Mémoire D'expressions

[man]sed[/man] est un éditeur de texte en ligne de commande. Il vous permet donc de modifier un fichier par une suite de directives, sans utiliser de logiciels comme [man]vim[/man] ou [man]gedit[/man]. Je vais vous montrer comment je procède pour modifier une configuration dans un script.

Prenons l’exemple du fichier suivant (un extrait de [man]rc.conf[/man] sous Archlinux :

LOCALE="en_US.utf8"
HARDWARECLOCK="localtime"
USEDIRECTISA="no"
TIMEZONE="Canada/Pacific"
KEYMAP="us"
CONSOLEFONT=
CONSOLEMAP=
USECOLOR="yes"

Je veux modifier le KEYMAP de "us" vers "fr". Voici la commande que j’utilise :

cat rc.conf | 'sed 's/\(KEYMAP="\)us\("\)/\1fr\2/'

La structure d’un [man]sed[/man] utilisé pour le remplacement (défini par le s) est :

's/élément à rechercher/remplacement de l'élément/'

J’aurai pu utiliser la commande suivante :

sed 's/KEYMAP="us"/KEYMAP="fr"/'

Mais il est plus simple mettre en mémoire une partie du texte d’origine. Pour cela il suffit de le mettre en parenthèses, pour le rappeler il faut utiliser les nombres de 1 à … l’infini (?). Par exemple :

echo "ABcdEF" | sed 's/\(AB\)cd\(EF\)/\1oooooo\2/'

donne :

ABooooooEF

Les ”\” permettent de ne pas prendre en compte les parenthèses et les chiffres dans la recherche/remplacement. Et si en plus vous voulez mettre "fr" à la place de n’importe qu’elle valeur, utilisez ”.*” (n’importe quel caractère un nombre indéfini de fois) :

sed 's/\(KEYMAP="\).*\("\)/\1fr\2/'

Bon démêlage de neurones ;-)

Comments