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…

Sed-Command-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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *