sed
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.
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. | |
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/flagsRemplace les expressions regulières RE par la chaine de remplacement entre les lignes ad1 à ad2
flags | g | global, c'est à dire toutes les occurences de la chaine RE (par defaut seule la première occurence est remplacée) |
p | imprime la ligne (utile avec l'option -n) | |
w fichier | ecrit la ligne dans le fichier specifié en plus de la sortie standard. | |
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 argumentLa 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 lignesed "/^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
: écrit le texte avant la ligne
texte
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
q | quitte |
= | écrit les numéro de ligne |
w fichier | écrit dans un fichier |
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,