retour sur @lyon coup de coeur du jour discussion roulette meteo locale La commande sed retour
editorial contact par mail

 

sed est un éditeur non interactif.
Cette commande permet d'appliquer un certain nombre de commandes sur un fichier puis d'en afficher le resultat (sans modification du fichier de départ) sur la sortie standard.

syntaxe : sed [-n] [-e commande] [-f fichier de commandes] [fichier]
-n  écrit seulement les lignes spécifiées (par l'option /p) sur la sortie standard 
-e  permet de specifier les commandes à appliquer sur le fichier. Cette option est utile lorque vous appliquez plusieurs commandes. Afin d'eviter que le shell interprette certains caracteres, il faut mieux encadrer la commande avec des ' ou des " .
-f  les commandes sont lu à partir d'un fichier. 
principe de fonctionnement : Pour chaque ligne , on applique la commande (si cela est possible) puis on affiche sur la sortie standard la ligne modifiée ou non.

la syntaxe générale des commandes est de la forme caracterisation_des_adresses commandes avec caractérisation_des_adresses de la forme :
toutes les lignes 
num  la ligne num (la dernière ligne est référencée par $
num1,num2  les lignes entre les lignes num1 et num2
RE  les lignes correspondant à l'expression régulière RE 
RE1,RE2  les lignes entre la première ligne correspondant à l'expression régulièreRE1 et la première ligne correspondant à l'expression régulière RE2

La commande de substitution s

syntaxe : ad1,ad2s/RE/remplacement/flags
Remplace les expressions regulières RE par la chaine de remplacement entre les lignes ad1 à ad2
flags  global, c'est à dire toutes les occurences de la chaine RE (par defaut seule la première occurence est remplacée)
imprime la ligne (utile avec l'option -n)
w fichier  ecrit la ligne dans le fichier specifié en plus de la sortie standard.
exemple :
sed "s/[Cc]omputer/COMPUTER/g" fichier
sed -e "s/\([0-9][0-9]*\)/**\1**/" fichier : encadre le premier nombre de la ligne avec des **

La négation !

syntaxe : ad1,ad2 !fonction argument
La fonction est appliquée à toutes les lignes qui ne correspondent pas à la caractérisation .

La commande de supression d

efface les lignes (au niveau de la sortie, le fichier d'origine n'est pas modifié)
example:
sed "1,10d" fichier : sortie du fichier à partir de la onzième ligne
sed "/^From/!d" fichier : On n'efface tout sauf les lignes commençant par From , donc on imprime les lignes commençant par From.
Remarque : Il est parfois plus facile de caractériser la négation de ce que l'on veut (voir example précédent) . Par exemple plutot de récuperer ce que je veux, j'efface ce qui ne m'interresse pas

Les commande d'insertions a,i

a\
texte : écrit le texte après la ligne

i\
texte : écrit le texte avant la ligne

exemple :
fichier de commandes :
1i\
\
------------------------------------------------------------------------------------\
LOGIN USER\
------------------------------------------------------------------------------------
s/:/!/
s/:/-/
s/:/-/
s/:/!/
s/!.*!/ /
s/:.*//

sed -f fich_commandes /etc/passwd
resultat :

------------------------------------------------------------------------------------ 
LOGIN                          USER 
------------------------------------------------------------------------------------ 
root                             Operator 
jd                                Jean Dupond 
vm                              Vincent Martin

Les autres commandes: q,= et w

quitte 
écrit les numéro de ligne 
w fichier  écrit dans un fichier 
exemple :
fichier d'entrée :
Un,
deux.
Trois,
quatre.

sed -e "q" fichier
resultat : Un,

sed -e "/\./=/" -e "/[A-Z]/w capitale" fichier
résultat à l'écran :
Un,
2
deux.
Trois,
4
quatre.
résultat dans le fichier capitale :
Un,
Trois,