Commande sed dans Bash

Nilesh Katuwal 24 mars 2022
  1. Syntaxe Bash sed
  2. Bash sed Exemples
Commande sed dans Bash

La commande sed est un éditeur de texte en continu qui fonctionne sur le concept de remplacement.

Il est utilisé pour découvrir, insérer, remplacer et supprimer des fragments de fichiers. Vous pouvez utiliser ce programme pour modifier des fichiers sans avoir à les ouvrir.

Ce didacticiel couvrira les principes fondamentaux du programme Linux sed, sa syntaxe et la syntaxe des expressions régulières utilisées directement pour rechercher et remplacer des fichiers.

Syntaxe Bash sed

sed est souvent utilisé pour traiter un flux de texte à partir d’une entrée standard ou d’un fichier. Cela signifie que vous pouvez passer la sortie d’une autre commande directement dans l’entrée de l’utilitaire pour l’édition, ou vous pouvez interagir avec un fichier qui a déjà été créé.

Par défaut, tous les résultats sont envoyés à la sortie standard, ce qui signifie qu’ils seront affichés à l’écran plutôt qu’enregistrés dans un fichier jusqu’à ce qu’ils soient redirigés.

Voici la syntaxe de la commande :

$ sed [options] commands [file-to-edit]

file-to-edit indique l’emplacement du fichier et options indique les règles lors de la manipulation du fichier donné. Et voici quelques-unes de ses principales options :

  • -n, -quiet : après chaque itération, ne sort pas le contenu du template buffer.
  • -e : commandes à exécuter pour l’édition.
  • -f : lit les commandes d’édition d’un fichier.
  • -i : crée une copie de sauvegarde du fichier avant édition.
  • -l : permet de définir la longueur de votre ligne.
  • -r : active la prise en charge de la syntaxe des expressions régulières étendues.
  • -s : lors du transfert de plusieurs fichiers, considérez-les comme des flux individuels plutôt qu’un seul long.

Bash sed Exemples

Nous avons créé un fichier nommé demosed.txt et l’avons enregistré dans le répertoire personnel avec le contenu suivant :

démodé

Commencez par afficher les lignes 1 à 5 du fichier demosed.txt dans le répertoire home.

Nous allons utiliser la commande p pour ce faire. Nous utilisons l’option -n pour imprimer ce dont nous avons besoin plutôt que tout le contenu du tampon de modèle à chaque itération.

$ sed -n '1,5p' demosed.txt

Production :

This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.

Pour sortir le fichier entier (à l’exception des lignes 1 à 10) :

$ sed '1,10d' demosed.txt

Nous utilisons d au lieu de la commande p pour supprimer le texte. Dans ce cas, nous n’avons pas utilisé l’option -n pour tout afficher car l’utilitaire affiche tout ce qui n’est pas effacé lorsque nous utilisons la commande de suppression, mais a plutôt utilisé la commande d pour effacer les éléments indésirables.

Production :

This is the eleventh line.
This is the twelveth line.
This is the thirteenth line.
This is the fifteenth line.

Comme prévu, seules les lignes de 11 à 15 sont imprimées.

Lorsque nous ouvrons demosed.txt, nous verrons la même commande que lorsque la commande précédente a été exécutée.

Pour des raisons de sécurité, sed ne modifie pas le fichier source par défaut. L’option -i, qui signifie modifier sur place, peut être utilisée pour altérer le fichier d’origine.

Pour supprimer la ligne 14th du fichier :

$ sed -i '13~15d' demosed.txt

La commande ci-dessus ne donne aucune sortie. Voyons le contenu à l’intérieur du fichier.

démodé1

Par rapport à l’ancienne version du fichier, nous voyons cette ligne 14 avec le texte This is thirteenth line. est manquant.

Regex peut aussi être utilisé dans sed avec options. Prenons un exemple.

$ sed '/^nine\|^$\| *nine/d' demosed.txt

Production :

This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
This is the sixth line.
This is the seventh line.
This is the eighth line.
This is the tenth line.
This is the eleventh line.
This is the twelveth line.
This is the fifteenth line.

'/^nine\|^$\| *nine/' est l’opération regex qui détecte la phrase contenant le mot nine. La commande ci-dessus n’altérera pas le fichier d’origine car nous n’avons pas utilisé -i, mais nous pouvons voir que la ligne avec nine est filtrée.