Shell - Sed Command
Arguments
Voici la liste de quelques arguments utiles :
-r: Permet d'insérer des expressions régulières dans la commande sed-e: Permet de passer plusieurs commande à la suite (Par défaut dans la plupart des versions de sed)-i: Permet de modifier directement le fichier-n: Mode silencieux qui permet de n'afficher que les lignes selectionnées avec l'optionp(print)
Mode
Silencieux
Le mode silencieux permet de n'afficher que les lignes sélectionnées avec l'option p (print). Pour l'activer il faut entrer l'argument -n à la commande sed:
Voici des exemples d'utilisation. Par exemple pour afficher la première (1) ou la dernière ($) :
Récupérer les lignes contenants uniquement le motif recherché (Similaire au grep) :
Compter les lignes (Similaire à wc -l):
Il est possible d'inverser la recherche pour afficher uniquement les lignes n'ayant pas le motif avec ! :
Substitution
Le mode substitution (s) permet de remplacer une expression par une autre. La syntaxe est la suivante:
Voici un exemple d'utilisation:
Les séparateurs peuvent être différent que le /, les exemples du dessous feront la même chose que celui du dessus:
echo "Il fait beau" | sed 's#beau#moche#'
echo "Il fait beau" | sed 's_beau_moche_'
echo "Il fait beau" | sed 'sXbeauXmocheX'
Cela est pratique quand le motif comprend le caractère / par exemple.
Il est possible de coupler les subsititutions pour par exemple capturer un mot :
Info
Dans cette exemple sed va remplacer le 'Bonjour ' par '' (vide) puis remplacer ' !.*' (soit tout ce qu'il y a après le point d'exclamation) par '' (vide)
Pour selectionner l'emplacement du caractère à remplacer, ajouter une valeur à la fin de la commande:
L'option g (global) permet de remplacer toutes les occurences par le caractère:
L'option I permet de ne pas prendre en compte la casse:
Pour remplacer une ligne par une autre directement, il existe aussi cette méthode:
Cette méthode nécessite donc de connaître au préalable le numéro de la ligne à modifier, exemple:
Exemples
Mettre les espacements au propre:
Eliminer tout espace blanc (espaces, tabulations) à la fin de chaque ligne:
Remplacer le 3ème ; par un _:
Suppression des 2 premiers caractères:
Suppression des 3 derniers caractères:
Suppression des 2 premiers et 2 derniers caractères:
Remplacer une directory pas une autre dans un fichier:
Translittération
La translittération (y) permet d'échanger certains caractères avec d'autres caractères.
Voici un exemple d'utilisation :
Suppression
Le mode suppression (d) permet de supprimer une ou plusieurs lignes selon son numéro ou motif:
Ou encore une plage de motif (qui supprimera les lignes du motif1 au motif2):
Info
La négation (!d) produit l'inverse et supprimera les lignes différentes du motif ou du numéro de ligne.
Il est possible de coupler les commandes pour supprimer plusieurs lignes:
Ou encore par le biais d'un motif:
Nous pouvons indiquer une plage de ligne à supprimer (Les 3 premières lignes):
Supprimera toutes les lignes qui ne comprennent pas A ou D:
Exemples
Supprimes toutes les lignes vides:
Supprimes toutes les lignes comprises entre B et le C:
Autres
Numérotation
Il est possible de numéroter les lignes d'un fichier. Voici un exemple:
echo -e "A\nB\nC\nD" > file.txt
sed = file.txt | sed 'N;s/\n/\t/'
sed = file.txt | sed -r 'N; s/^/ /; s/ *(.{4,})\n/\1 /'
L'on peut aussi numéroter chaque ligne d'un fichier, mais afficher le numéro de ligne seulement si la ligne n'est pas vide.
Insertion
Espacer en double un fichier:
Espacer en double un fichier qui a déjà des lignes vides. Le fichier de sortie n'aura jamais plus qu'une ligne vide entre les lignes de texte:
Défaire le double-espacement (assumons les lignes paires comme étant toujours vides):
Espacer en triple un fichier:
Insérer une ligne vide au-dessus de chaque ligne qui contient regex:
Insérer une ligne vide sous chaque ligne qui contient l'expression régulière regex:
Insérer une ligne vide au-dessus et au-dessous de chaque ligne qui contient regex: