[TOC]
grep ne fait aucune edition. sed est un outil en ligne de commande permettant d`accomplir cette tâche.
username@hostname:~$ sed -e 'd' /etc/passwd- L'entrée
/etc/passwdpasse chaque ligne du fichier à la commandesed. -eindique que l'on adjoint un script, icid.dindique à sed d'effacer les lignes qui lui sont passées. Étant donné que toutes les lignes sont effacées, rien n'est affiché à l`écran.
username@hostname:~$ sed -e '2d' /etc/passwd
(…)
username@hostname:~$ sed -e '1,10d' /etc/passwd
(…)
username@hostname:~$ sed -e '/^system/d' /etc/passwd
(…)
username@hostname:~$ sed -n -e '/^system/p' /etc/passwd
(…)
sed permet d'utiliser des expressions régulières pour définir la portée.
Recopiez ce fichier dans main.c,
# include<stdio.h>
void main()
{
printf("Hello World");
}Nous pouvons utiliser sed pour afficher la fonction main,
username@hostname:~$ sed -n -e '/main[[:space:]]*(/,/^}/p' main.cjusqu'à maintenant, nous avons utilisé sed pour faire de l'affichage. Maintenant nous allons nous intéresser à l'essentiel, la substitution.
username@hostname:~$ echo "blanc" > test
username@hostname:~$ sed -e 's/blanc/noir/' test
noir
username@hostname:~$ sed -e 's/:/\t/g' /etc/passwd
(…)Il est possible d'exécuter un ensemble de commandes pour chaque ligne. Il est dans ce cas util de mettre ces commandes dans un fichier. Recopiez le code suivant dans commande.sed,
1,20{
s/:/\t/g
s/[0-9]//g
s/x//g
}
Puis exécutez la commande suivante,
username@hostname:~$ sed -f commande.sed /etc/passwd
(…) jusqu'à maintenant, nous avons travailler sur un fichier d'entrée puis afficher le résultat à l'écran. Si nous voulons appliquer les modifications,
username@hostname:~$ echo "blanc" > test
username@hostname:~$ sed -i -e 's/blanc/noir/' test
username@hostname:~$ echo "blanc" > test
username@hostname:~$ sed -i -e 's/blanc/noir/' test > test
username@hostname:~$ sed -i -e 's/blanc/noir/' test > resultatusername@hostname:~$ echo '<b>ceci</b> est <b>un</b> test.' > test.html
username@hostname:~$ sed -e 's/<.*>//g' test.html # cas 1
test.
username@hostname:~$ sed -e 's/<[^>]*>//g' test.html # cas 2
ceci est un test.Dans le cas 1, sed, cherche la plus grande correspondance possible dans la ligne, c'est à dire,
<b>ceci</b> est <b>un</b>Efface cette corespondance et affiche le reste
Dans le cas 2, sed cherche à nouveau la plus grande correspondance.
- sed commence par chercher un <.
- [^>] impose à ce que le caractère suivant soit autre que > .
- * impose qu'il y ait zero ou plus de caractéres quelconques (un > n'est pas possible, voir prochain point).
- > impose à ce que le caractère de fin soit un >.
l'exemple suivant permet peut-être de donner plus de lumière,
username@hostname:~$ echo '<b>ceci</d>> est <bB>un</b<> test.' > testw.html
username@hostname:~$ sed -e 's/<[^>]*>//g' test.html une autre façon de faire,
username@hostname:-$ sed -e 's/<[/]*b>//g' test.html