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 :
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.
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.