Skip to content

Latest commit

 

History

History
128 lines (93 loc) · 3.33 KB

File metadata and controls

128 lines (93 loc) · 3.33 KB

sed

table des matières

[TOC]

Introduction à sed

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/passwd passe chaque ligne du fichier à la commande sed.
  • -e indique que l'on adjoint un script, ici d.
  • d indique à 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.c
Substitution avec sed :

jusqu'à 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
(…)
Fichier de commandes avec sed :

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
 (…)   
Appliquer les modifications :

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 > resultat
Substitution avancée avec sed :
username@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