====== sed ======
----
===== Syntaxe de base =====
sed [-n] action [fichier1 fichier2 ... fichierx]
sed [-n] -e action1 [-e action2 ...] [fichier1 fichier2 ... fichierx]
sed -f script-sed [fichier1 fichier2 ... fichierx]
| -n | écrit seulement les lignes spécifiées sur la sortie standard |
| -e | permet de spécifier les commandes à appliquer sur le fichier |
| -f | les commandes sont lu à partir d'un fichier |
| -i[SUFFIX] | modifie directement le fichier (avec une sauvegarde si SUFFIX est ajouté) |
| -r | syntaxe étendue pour les expressions régulières |
La commande sed ne modifie pas le fichier d'origine sauf si elle est exécutée avec l'option -i.
----
[[all:bibles:linux:commandes:sed|Haut de page]]
===== Syntaxe d'une action =====
[adresse[,adresse]] commande [arguments]
Une action est syntaxiquement composée de :
* Une partie adresse qui permet de spécifier sur quelles lignes doit s'effectuer la commande.
* La commande à exécuter.
* Les arguments de la commande.
==== Syntaxe d'une adresse ====
| | toutes les lignes |
| num | la ligne num (la dernière ligne est référencée par $) |
| num1,num2 | de la ligne num1 à la ligne num2 |
| /REG/ | les lignes correspondant à l'expression régulière REG |
| /REG1,REG2/ | les lignes entre la première ligne correspondant à l'expression régulière REG1 et la première ligne correspondant à l'expression régulière REG2 |
==== Syntaxe de la commande ====
^ Commande ^ Argument ^ Action ^
| d | Aucun | Ne pas afficher les lignes spécifiées (delete). |
| p | Aucun | Afficher les lignes spécifiées (print). |
| s | /REG/remplacement/[g] | Effectuer une substitution sur les lignes spécifiées (substitute). Le caractère optionnel "g" indique si la substitution doit être globale sur les lignes. |
| w | fichier | Ecrire les lignes spécifiées dans un fichier (write). |
| = | Aucun | Afficher le numéro de la ligne spécifiée. |
| a | texte | Ajouter les lignes de texte après chaque ligne spécifiée (add). |
| i | texte | Insérer les lignes de texte avant chaque ligne spécifiée (insert). |
| c | texte | Remplacer les ligne spécifiées par les lignes de texte (change). |
=== Négation de commande ===
| ! | La commande s'exécutera sur toutes les lignes sauf celles spécifiées dans l'adresse. |
----
===== Exemples =====
==== Suppression ====
=== suppression de lignes ===
sed '1d;4d' fichier.txt # supprime les lignes 1 et 4 du fichier
sed '1,4d' fichier.txt # supprime les lignes 1 à 4 du fichier
=== suppression de lignes selon expression régulière ===
sed '/^#/d' fichier.txt # supprime les lignes qui commencent par un commentaire
sed "/^#/!d" fichier.txt # supprime tout sauf les ligne qui commencent par un commentaire, donc affiche toutes les lignes commençant par un #
sed '/^#/d;/_/d' fichier.txt # supprime les lignes entre une ligne commençant par # et une ligne comportant un _
=== combinaison des 2 ===
sed '1d;/^#/d' fichier.txt # suppression de la première ligne et de toutes les lignes qui commencent par un commentaire
==== Filtrage ====
sed -n '/^#/p' fichier.txt # on n'affiche que les lignes qui commencent par #
sed -n 5p fichier.txt # on n'affiche que la ligne 5
sed -n 5,10p fichier.txt # on affiche de la ligne 5 à la ligne 10
==== Substitution ====
sed 's/truc/machin/' fichier.txt # remplace truc par machin
sed "s/[Cc]omputer/COMPUTER/g" fichier.txt # remplace computer et Computer par COMPUTER
sed -e "s/\([0-9][0-9]*\)/**\1**/" fichier.txt # encadre le premier nombre de la ligne avec des **
sed -z 's/\n/ /g' fichier.txt # supprime les retours à la ligne
==== Translitération ====
sed 'y/éèêë/eeee/' fichier .txt # remplace les e accentués par un e simple
==== Commandes groupés ====
sed '2,6 {y/éèê/eee/;s/truc/machin/g}' fichier.txt # remplace les e accentués et truc par machin sur les lignes 2 à 6
sed '/^#/ {y/éèê/eee/;s/truc/machin/g}' fichier.txt # remplace les e accentués et truc par machin sur les lignes qui commencent par un #
==== Divers ====
sed -n "/\./=" fichier.txt # affiche les numéros des lignes comportant un .
sed -e "/\./=" -e "/[A-Z]/w capitale" fichier.txt # idem et écrit dans le fichier capitale toutes les lignes qui ont une majuscule
----
[[all:bibles:linux:commandes:sed|Haut de page]]