La commande Sed ou Stream Editor est un utilitaire très puissant offert par les systèmes Linux/Unix. Il est principalement utilisé pour la substitution de texte , trouver & remplacer mais il peut également effectuer d’autres manipulations de texte comme l’insertion, la suppression, la recherche, etc. Avec SED, nous pouvons modifier des fichiers complets sans avoir à les ouvrir. Sed supporte également l’utilisation d’expressions régulières, ce qui fait de sed un outil de manipulation de test encore plus puissant.
Dans cet article, nous allons apprendre à utiliser la commande SED à l’aide de quelques exemples. La syntaxe de base pour utiliser la commande sed est,
sed OPTIONS…
Voyons maintenant quelques exemples.
Exemple :1) Afficher le texte partiel d’un fichier
Avec sed, nous pouvons voir seulement une partie d’un fichier plutôt que de voir le fichier entier. Pour voir quelques lignes du fichier, utilisez la commande suivante,
$ sed -n 22,29p testfile.txt
ici, l’option ‘n’ supprime l’impression de tout le fichier & l’option ‘p’ n’imprimera que les lignes de 22 à 29.
Exemple :2) Afficher tout sauf certaines lignes
Pour afficher tout le contenu d’un fichier sauf une partie, utilisez la commande suivante,
$ sed 22,29d testfile.txt
L’option ‘d’ supprimera les lignes mentionnées de la sortie.
Exemple :3) Afficher chaque 3ème ligne à partir de la Nième ligne
Pour afficher le contenu de chaque 3ème ligne à partir de la ligne numéro 2 ou de toute autre ligne, utilisez la commande suivante
$ sed -n '2~3p' file.txt
Exemple :4 ) Suppression d’une ligne à l’aide de la commande sed
Pour supprimer une ligne avec sed dans un fichier, utilisez la commande suivante,
$ sed Nd testfile.txt
où ‘N’ est le numéro de ligne & l’option ‘d’ supprimera le numéro de ligne mentionné. Pour supprimer la dernière ligne du fichier, utilisez
$ sed $d testfile.txt
Exemple :5). Suppression d’une plage de lignes
Pour supprimer une plage de lignes du fichier, exécutez
$ sed '29,34d' testfile.txt
cette opération supprimera les lignes 29 à 34 du fichier testfile.txt.
Exemple :6) Suppression des lignes autres que celles mentionnées
Pour supprimer les lignes autres que celles mentionnées d’un fichier, nous utiliserons ‘!’
$ sed '29,34!d' testfile.txt
Ici l’option ‘!’ est utilisée comme non, donc elle inversera la condition c’est-à-dire qu’elle ne supprimera pas les lignes mentionnées. Toutes les lignes autres 29-34 seront supprimées des fichiers testfile.txt.
Exemple :7) Ajout de lignes vides/espaces
Pour ajouter une ligne vide après chaque ligne non vide, nous utiliserons l’option ‘G’,
$ sed G testfile.txt
Exemple :8) Rechercher et remplacer une chaîne de caractères en utilisant sed
Pour rechercher & remplacer une chaîne de caractères du fichier, nous utiliserons l’exemple suivant ,
$ sed 's/danger/safety/' testfile.txt
ici l’option ‘s’ recherchera le mot ‘danger’ & le remplacer par ‘sécurité’ sur chaque ligne pour la première occurrence seulement.
Exemple :9) Rechercher et remplacer une chaîne de caractères à partir de tout le fichier en utilisant sed
Pour remplacer complètement le mot du fichier, nous utiliserons l’option ‘g’ avec ‘s’,
$ sed 's/danger/safety/g' testfile.txt
Exemple :10). Remplacer la nième occurrence d’un motif de chaîne de caractères
Nous pouvons également remplacer une chaîne de caractères à la nième occurrence d’un fichier. Comme remplacer ‘danger’ par ‘sécurité’ uniquement à la deuxième occurrence,
$ sed ‘s/danger/safety/2’ testfile.txt
Pour remplacer ‘danger’ à la 2e occurrence de chaque ligne de tout le fichier, utilisez
$ sed 's/danger/safety/2g' testfile.txt
Exemple :11). Remplacer une chaîne de caractères sur une ligne particulière
Pour remplacer une chaîne de caractères uniquement à partir d’une ligne particulière, utilisez
$ sed '4 s/danger/safety/' testfile.txt
Ceci ne remplacera que la chaîne de caractères de la 4e ligne du fichier. Nous pouvons également mentionner une plage de lignes au lieu d’une seule ligne,
$ sed '4,9 s/danger/safety/' testfile.txt
Exemple :12). Ajouter une ligne après/avant la recherche appariée
Pour ajouter une nouvelle ligne avec un certain contenu après chaque correspondance de motif, utilisez l’option ‘a’ ,
$ sed '/danger/a "This is new line with text after match"' testfile.txt
Pour ajouter une nouvelle ligne avec un certain contenu a avant chaque correspondance de motif, utilisez l’option ‘i’,
$ sed '/danger/i "This is new line with text before match" ' testfile.txt
Exemple :13) Changer une ligne entière avec un motif correspondant
Pour changer une ligne entière en une nouvelle ligne lorsqu’un motif de recherche correspond, nous devons utiliser l’option ‘c’ avec sed,
$ sed '/danger/c "This will be the new line" ' testfile.txt
Donc lorsque le motif correspond à ‘danger’, la ligne entière sera changée en la ligne mentionnée.
Options avancées avec sed
Jusqu’à présent, nous n’utilisions que des expressions simples avec sed, maintenant nous allons discuter de quelques utilisations avancées de sed avec regex,
Exemple :14). Exécuter plusieurs commandes sed
Si nous devons exécuter plusieurs expressions sed, nous pouvons utiliser l’option ‘e’ pour enchaîner les commandes sed,
$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
Exemple :15) Faire une copie de sauvegarde avant de modifier un fichier
Pour créer une copie de sauvegarde d’un fichier avant de le modifier, utilisez l’option ‘-i.bak’,
$ sed -i.bak -e 's/danger/safety/g' testfile.txt
Cela créera une copie de sauvegarde du fichier avec l’extension .bak. Vous pouvez également utiliser une autre extension si vous le souhaitez.
Exemple :16) Supprimer une ligne de fichier commençant par & se terminant par un motif
Pour supprimer une ligne commençant par une chaîne particulière & se terminant par une autre chaîne, utilisez
$ sed -e 's/^danger.*stops$//g' testfile.txt
Cela supprimera la ligne avec ‘danger’ au début & ‘arrêts’ à la fin & elle peut avoir n’importe quel nombre de mots entre , ‘.*’ définit cette partie.
Exemple :17) Ajout de lignes
Pour ajouter du contenu avant chaque ligne avec sed & regex, utilisez
$ sed -e 's/.*/testing sed &/' testfile.txt
Donc maintenant chaque ligne aura ‘testing sed’ avant elle.
Exemple :18) Suppression de toutes les lignes commentées & lignes vides
Pour supprimer toutes les lignes commentées c’est-à-dire. les lignes avec # & toutes les lignes vides, utilisez
$ sed -e 's/#.*//;/^$/d' testfile.txt
Pour supprimer uniquement les lignes commentées, utilisez
$ sed -e 's/#.*//' testfile.txt
Exemple :19) Obtenir la liste de tous les noms d’utilisateur à partir de /etc/passwd
Pour obtenir la liste de tous les noms d’utilisateur à partir du fichier /etc/passwd, utilisez
$ sed 's/\(*\).*/\1/' /etc/passwd
une liste complète tous les noms d’utilisateur sera générée à l’écran comme sortie.
Exemple :20) Empêcher l’écrasement des liens système avec la commande sed
La commande ‘sed -i’ est connue pour supprimer les liens système & créer uniquement des fichiers réguliers à la place du fichier de lien. Donc, pour éviter une telle situation & empêcher ‘sed -i’ de détruire les liens, utilisez les options ‘-follow-symklinks’ avec la commande en cours d’exécution.
Supposons que je veuille désactiver SELinux sur CentOS ou RHEL Severs
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
.