[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 ;-)