Commande Sed ou éditeur de flux est un utilitaire très puissant offert par les systèmes Linux/Unix. Il est principalement utilisé pour la substitution de texte , rechercher et remplacer, mais il peut également effectuer d'autres manipulations de texte comme l'insertion , suppression , rechercher etc. Avec SED, nous pouvons éditer des fichiers complets sans avoir à les ouvrir. Sed prend également en charge 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… [SCRIPT] [INPUTFILE…]
Voyons maintenant quelques exemples.
Exemple :1) Affichage du texte partiel d'un fichier
Avec sed, nous ne pouvons voir qu'une partie d'un fichier plutôt que de voir le fichier entier. Pour voir certaines lignes du fichier, utilisez la commande suivante,
[[email protected] ~]$ sed -n 22,29p testfile.txt
ici, l'option 'n' supprime l'impression de tout le fichier et 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 à l'exception d'une partie, utilisez la commande suivante,
[[email protected] ~]$ sed 22,29d testfile.txt
L'option 'd' supprimera les lignes mentionnées de la sortie.
Exemple :3) Afficher toutes les 3èmes lignes en commençant par la Nième ligne
Affichez le contenu de chaque 3ème ligne en commençant par la ligne numéro 2 ou toute autre ligne, utilisez la commande suivante
[[email protected] ~]$ sed -n '2~3p' file.txt
Exemple :4 ) Suppression d'une ligne à l'aide de la commande sed
Pour supprimer une ligne avec sed d'un fichier, utilisez la commande suivante,
[[email protected] ~]$ sed Nd testfile.txt
où 'N' est le numéro de ligne et l'option 'd' supprimera le numéro de ligne mentionné. Pour supprimer la dernière ligne du fichier, utilisez
[[email protected] ~]$ sed $d testfile.txt
Exemple :5) Supprimer une plage de lignes
Pour supprimer une plage de lignes du fichier, exécutez
[[email protected] ~]$ sed '29,34d' testfile.txt
Cela supprimera les lignes 29 à 34 du fichier testfile.txt.
Exemple :6) Suppression de lignes autres que celles mentionnées
Pour supprimer des lignes autres que les lignes mentionnées d'un fichier, nous utiliserons '!'
[[email protected] ~]$ sed '29,34!d' testfile.txt
ici l'option '!' est utilisée comme non, elle inversera donc 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/espaces vides
Pour ajouter une ligne vide après chaque ligne non vide, nous utiliserons l'option 'G',
[[email protected] ~]$ sed G testfile.txt
Exemple :8) Rechercher et remplacer une chaîne à l'aide de sed
Pour rechercher et remplacer une chaîne à partir du fichier, nous utiliserons l'exemple suivant,
[[email protected] ~]$ sed 's/danger/safety/' testfile.txt
ici, l'option 's' recherchera le mot 'danger' et le remplacera par 'sécurité' sur chaque ligne pour la première occurrence uniquement.
Exemple :9) Rechercher et remplacer une chaîne dans un fichier entier à l'aide de sed
Pour remplacer complètement le mot du fichier, nous utiliserons l'option "g" par "s",
[[email protected] ~]$ sed 's/danger/safety/g' testfile.txt
Exemple :10) Remplacer la nième occurrence du modèle de chaîne
Nous pouvons également substituer une chaîne à la nième occurrence d'un fichier. Comme remplacer « danger » par « sécurité » uniquement à la deuxième occurrence,
[[email protected] ~]$ sed ‘s/danger/safety/2’ testfile.txt
Pour remplacer "danger" à la 2ème occurrence de chaque ligne du fichier entier, utilisez
[[email protected] ~]$ sed 's/danger/safety/2g' testfile.txt
Exemple :11) Remplacer une chaîne sur une ligne particulière
Pour remplacer une chaîne uniquement à partir d'une ligne particulière, utilisez
[[email protected] ~]$ sed '4 s/danger/safety/' testfile.txt
Cela ne remplacera que la chaîne de la 4ème ligne du fichier. On peut également mentionner une plage de lignes au lieu d'une seule ligne,
[[email protected] ~]$ sed '4,9 s/danger/safety/' testfile.txt
Exemple :12) Ajouter une ligne après/avant la recherche correspondante
Pour ajouter une nouvelle ligne avec du contenu après chaque correspondance de modèle, utilisez l'option 'a' ,
[[email protected] ~]$ sed '/danger/a "This is new line with text after match"' testfile.txt
Pour ajouter une nouvelle ligne avec du contenu avant chaque correspondance de motif, utilisez l'option "i",
[[email protected] ~]$ 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 modèle de recherche correspond, nous devons utiliser l'option 'c' avec sed,
[[email protected] ~]$ sed '/danger/c "This will be the new line" ' testfile.txt
Ainsi, lorsque le motif correspond à "danger", toute la ligne sera remplacée par la ligne mentionnée.
Options avancées avec sed
Jusqu'à présent, nous n'utilisions que des expressions simples avec sed, nous allons maintenant discuter de certaines utilisations avancées de sed avec regex,
Exemple :14) Exécution de plusieurs commandes sed
Si nous devons exécuter plusieurs expressions sed, nous pouvons utiliser l'option 'e' pour enchaîner les commandes sed,
[[email protected] ~]$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
Exemple :15) Faire une copie de sauvegarde avant d'éditer un fichier
Pour créer une copie de sauvegarde d'un fichier avant de le modifier, utilisez l'option "-i.bak",
[[email protected] ~]$ 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 et finissant par un motif
Pour supprimer une ligne commençant par une chaîne particulière et se terminant par une autre chaîne, utilisez
[[email protected] ~]$ sed -e 's/^danger.*stops$//g' testfile.txt
Cela supprimera la ligne avec 'danger' au début et 'stops' à la fin et il peut y 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 ®ex, utilisez
[[email protected] ~]$ sed -e 's/.*/testing sed &/' testfile.txt
Désormais, chaque ligne sera précédée de "testing sed".
Exemple :18) Suppression de toutes les lignes commentées et des lignes vides
Pour supprimer toutes les lignes commentées, c'est-à-dire les lignes avec # et toutes les lignes vides, utilisez
[[email protected] ~]$ sed -e 's/#.*//;/^$/d' testfile.txt
Pour supprimer uniquement les lignes commentées, utilisez
[[email protected] ~]$ sed -e 's/#.*//' testfile.txt
Exemple :19) Obtenir la liste de tous les noms d'utilisateur depuis /etc/passwd
Pour obtenir la liste de tous les noms d'utilisateur à partir du fichier /etc/passwd, utilisez
[[email protected] ~]$ sed 's/\([^:]*\).*/\1/' /etc/passwd
une liste complète de tous les noms d'utilisateur sera générée à l'écran en 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 et créer uniquement des fichiers normaux à la place du fichier de lien. Donc, pour éviter une telle situation et empêcher 'sed -i ‘ de détruire les liens, utilisez ‘–follow-symklinks ' avec la commande en cours d'exécution.
Supposons que je veuille désactiver SELinux sur CentOS ou RHEL Severs
[[email protected] ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
Ce sont quelques exemples pour montrer sed, nous pouvons utiliser ces références pour les utiliser au besoin. Si vous avez des questions concernant cet article ou tout autre article, partagez-les avec nous.
Lire aussi : 14 exemples de commandes SCP pour transférer des fichiers en toute sécurité sous Linux