Navigation rapide : Lundi / Mardi / Mercredi / Jeudi / Vendredi
La commande sed 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. Son utilisation se rapproche des compmandes de l'editeur ed.
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 :
La commande de substitution s : ad1,ad2s/RE/remplacement/flags
commande de remplacement y : ad1,ad2 y/C1/C2/ remplace le caractere de C1 par le caractere de C2
Commande de destruction d : sed “^$/d” détruit les lignes vides
Commande d'ajout a, d'insertion i, de remplacement de ligne c….
-ecrire toutes les apparition de computer dans fichier en majuscules
1: sed "s/[Cc][Oo][Mm][Pp][Uu][Tt][Ee][Rr]/COMPUTER/g" fichier
-encadre le premier nombre de la ligne avec des '\*\*'
1: sed -e "s/\([0-9][0-9]*\)/**\1**/" fichier
foo bar oni
eeny meeny miny
larry curly moe
jimmy the weasel
sed -e 's/\(.*\) \(.*\) \(.*\)/Victor \1-\2 Von \3/' myfile.txt
Victor foo-bar Von oni
Victor eeny-meeny Von miny
Victor larry-curly Von moe
Victor jimmy-the Von weasel
Comme sed, awk permet d'éditer un fichier texte mais embarque un langage de programmation plus complet.
Par exemple, à partir du fichier ci-dessous, qui représente un tableau, nous souhaitons ajouter une colonne nommée uid avec un nombre commençant à 1000 et incrémenté à chaque ligne.
^ Nom ^ Prénom ^ Login ^ Email ^ | Térieur | Alain | aterieu | aterieu@exemple.com | | Hate | Tom | thate | thate@exemple.com | | Aterre | Vac | vater | vater@exemple.com | | Darque | Jeanne | jdarque | jdarque@exemple.com |
1: awk -v UIDMIN=1000 -F '|' 'BEGIN { idx=UIDMIN ; print "^ Nom ^ Prénom ^ Login ^ Uid ^ Email ^" } /^\|/ {printf("|%s|%s|%s|%s|%s|\n",$2,$3,$4,idx++,$5) ; } END { printf("%s lignes\n",idx); }' table.wiki
Pour obtenir quelquechose de plus lisible, il est intéressant de placer le programme awk dans un fichier séparé.
BEGIN { idx=UIDMIN ; print "^ Nom ^ Prénom ^ Login ^ Uid ^ Email ^" } /^\|/ { printf("|%s|%s|%s|%s|%s|\n",$2,$3,$4,idx++,$5) ; } END { printf("%s lignes\n",idx); }
En plaçant cela dans prog.awk, nous l'invoquons avec la commande :
awk -v UIDMIN=1000 -F '|' -f prog.awk table.wiki