Linux sed (Stream Editor) est un puissant outil de traitement de texte qui effectue des opérations telles que la recherche, le remplacement et l'édition de texte sur la ligne de commande. Le concept de conception de sed est de traiter le texte ligne par ligne. Il peut lire le texte d'entrée ligne par ligne et appliquer l'opération spécifiée, puis afficher le résultat.
La commande sed a une variété d'options et de fonctions. Ce qui suit présentera son utilisation courante et des exemples en détail.
-
Remplacer le texte :
utilisezs/old/new/
un modèle pour implémenter une opération de remplacement qui remplace l'"ancienne" chaîne dans le texte d'entrée par la "nouvelle" chaîne. Par exemple:$ sed 's/foo/bar/' input.txt
Cela remplacera toutes les occurrences de "foo" par "bar" dans le fichier input.txt.
sed prend en charge la substitution globale,
s/old/new/
incluez simplement le drapeau après la première barre oblique dans le fichierg
. Par exemple:$ sed 's/foo/bar/g' input.txt
Cela remplacera toutes les occurrences de "foo" par "bar".
-
Supprimer les lignes :
utilisezd
la commande pour supprimer les lignes correspondant à un motif. Par exemple:$ sed '/pattern/d' input.txt
Cela supprimera toutes les lignes du fichier input.txt qui correspondent au motif "pattern".
-
Insérer et ajouter du texte :
utilisezi
des commandes pour insérer du texte avant la ligne spécifiée et utiliseza
des commandes pour ajouter du texte après la ligne spécifiée. Par exemple:$ sed '3i\This is line 3' input.txt
Cela insérera le texte "Ceci est la ligne 3" avant la troisième ligne dans le fichier input.txt.
$ sed '3a\This is line 4' input.txt
Cela ajoutera le texte "Ceci est la ligne 4" après la troisième ligne du fichier input.txt.
-
printtext :
utilisezp
la commande pour imprimer les lignes correspondant au motif. Par exemple:$ sed -n '/pattern/p' input.txt
Cela imprimera toutes les lignes du fichier input.txt qui correspondent au motif "pattern".
Si vous souhaitez imprimer toutes les lignes, vous pouvez utiliser la commande suivante :
$ sed -n 'p' input.txt
-
Édition de fichier :
utilisez-i
l'option pour implémenter l'édition sur place, c'est-à-dire modifier directement le fichier source sans générer de nouveau fichier de sortie. Par exemple:$ sed -i 's/foo/bar/' input.txt
Cela remplacera toutes les occurrences de "foo" par "bar" directement dans le fichier d'entrée input.txt.
-
Spécifiez la plage de traitement :
vous pouvez utiliser l'adresse de ligne pour spécifier la plage de traitement de la commande sed. Par exemple, en utilisant des nombres pour les numéros de ligne :$ sed '2,5d' input.txt
Cela supprimera le contenu entre les deuxième et cinquième lignes du fichier input.txt.
Vous pouvez également spécifier la plage de traitement à l'aide d'expressions régulières. Par exemple, pour traiter le texte entre "début" et "fin" :
$ sed '/start/,/end/d' input.txt
Cela supprimera le texte entre le motif correspondant "début" et "fin" dans le fichier input.txt.
-
Commandes d'édition multiples :
plusieurs commandes sed peuvent être regroupées à l'aide de points-virgules. Par exemple:$ sed 's/foo/bar/; s/abc/xyz/' input.txt
Cela remplacera d'abord toutes les occurrences de "foo" dans le fichier input.txt par "bar", puis toutes les occurrences de "abc" par "xyz".
Il est également possible d'écrire plusieurs commandes d'édition dans un fichier de script et
-f
de les exécuter avec des options. Par exemple, pour stocker les commandes d'édition dans un fichier script.sed :$ sed -f script.sed input.txt
-
Spécifiez le numéro de ligne à opérer :
Utilisez le numéro de ligne représenté par des nombres (tels que 1, 2, 3, etc.) pour spécifier la ligne à opérer. Par exemple, la commande suivante remplacera la deuxième chaîne "foo" dans le fichier input.txt :$ sed '2s/foo/bar/' input.txt
-
Entre guillemets de caractères spéciaux :
dans l'opération de remplacement, si vous souhaitez entre guillemets une chaîne contenant des caractères spéciaux, vous pouvez les échapper avec une barre oblique inverse. Par exemple, la commande pour remplacer "$100" par "$200" est la suivante :$ sed 's/\$100/\$200/' input.txt
-
Correspondance et remplacement basés sur des expressions régulières :
les expressions régulières peuvent être utilisées comme modèles de correspondance dans les commandes sed. Par exemple, pour remplacer toutes les lignes commençant par des chiffres par des lignes vides :$ sed 's/^[0-9].*$/ /' input.txt
-
Afficher uniquement les lignes remplacées :
utilisez l'option -n pour supprimer la sortie par défaut de sed, puis utilisez la commande p pour imprimer les lignes correspondantes. Par exemple, pour afficher uniquement les lignes après l'opération de remplacement :$ sed -n 's/foo/bar/p' input.txt
-
Traiter plusieurs fichiers :
utilisez plusieurs noms de fichiers comme paramètres de la commande sed pour traiter plusieurs fichiers par lots. Par exemple, pour remplacer toutes les occurrences de "foo" par "bar" dans les fichiers 1.txt et 2.txt :$ sed 's/foo/bar/' 1.txt 2.txt
-
Correspondance de référence arrière :
à l'aide de groupes de capture d'expressions régulières et de références arrière, vous pouvez utiliser le contenu correspondant dans l'opération de remplacement. Par exemple, pour remplacer "a123b" par "b123a" dans le fichier input.txt :$ sed 's/\(a\)\([0-9]\+\)\(b\)/\3\2\1/' input.txt
-
Supprimer les lignes vides :
utilisez la commande suivante pour supprimer les lignes vides dans un fichier :$ sed '/^\s*$/d' input.txt
-
Exécuter le fichier de script :
créez un fichier texte contenant les commandes sed et utilisez-f
les options pour exécuter le fichier de script. Par exemple, pour stocker les commandes d'édition dans un fichier script.sed et exécuter :$ sed -f script.sed input.txt