Introduction à l'éditeur sed
Le terme sed signifie éditeur de flux . Sed peut prendre son entrée depuis l'entrée standard, appliquer les modifications demandées sur le flux et mettre automatiquement les résultats en sortie standard. La syntaxe sed permet de spécifier un fichier d'entrée sur la ligne de commande.
Vous n'avez pas besoin d'interagir avec l'éditeur sed pendant son exécution; par conséquent, il a également été appelé éditeur de lots. Cela contraste avec des éditeurs tels que vi et ed, qui sont interactifs. Étant donné que sed ne nécessite aucune interaction, vous pouvez placer des commandes sed dans un script. Vous pouvez appeler le fichier de script et l'exécuter sur le fichier de données pour effectuer des opérations d'édition répétitives.
Format de commande
Voici la syntaxe de la commande sed :
# sed [options] 'action [args]' files [ > outfile]
L'éditeur sed est capable d'effectuer des substitutions de modèles de texte et des suppressions de modèles de texte à l'aide de la syntaxe des expressions régulières. Ce sont les mêmes caractères d'expression régulière utilisés par grep.
La commande sed offre des fonctionnalités qui sont une extension de l'édition de texte interactive. Si vous devez rechercher et remplacer des chaînes de texte dans un grand nombre de fichiers, sed est le plus utile.
Édition des commandes
L'éditeur sed utilise des commandes d'édition (indiquées dans le tableau) similaires à celles que vous utiliseriez pour vi et ed.
Commande | Fonction |
---|---|
d | Supprime la ou les lignes |
p | Imprime ligne(s) |
r | Lit un fichier |
s | Remplace une chaîne par une autre |
w | Écrit dans un fichier |
La commande sed a deux options :
Option | Fonction |
---|---|
-n | Supprime la sortie par défaut |
-f | Lit les commandes sed à partir d'un fichier de script |
Exemples de données utilisés dans les exemples
Les exemples suivants exécutent des commandes sed sur le fichier nommé "data.txt". Le contenu du fichier data.txt est le suivant.
# cat data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Utiliser sed pour imprimer du texte
Exemple 1 :Impression d'une plage de lignes
L'exemple suivant montre l'utilisation de la commande p (print), qui imprime une plage de lignes sur stdout. La plage est spécifiée par une adresse de début suivie d'une virgule, puis de l'adresse de fin. La sortie par défaut de sed est chaque ligne qu'il lit. Pour supprimer la sortie par défaut, utilisez l'option -n.
# sed -n '3,5p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3
Exemple 2 :Impression de lignes contenant un motif spécifique
La commande suivante imprime toutes les lignes avec le motif ouest. Utilisez la barre oblique (/) pour délimiter l'expression régulière.
# sed -n '/west/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33
Exemple 3 :Ligne d'impression avec plusieurs motifs
La commande suivante imprime la première ligne contenant le motif ouest, jusqu'à et y compris la ligne suivante contenant le motif sud.
# sed -n '/west/,/southern/p' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45
Exemple 4 :Impression d'une ligne avec motif et de toutes les lignes suivantes
La commande suivante imprime la première ligne contenant le motif Chris, jusqu'à la dernière ligne du fichier.
# sed -n '/Chris/,$p' data.txt southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Exemple 5 :Fonctionnalité similaire à grep
Le modèle peut contenir les caractères d'expression régulière utilisés par grep. L'exemple suivant imprime toutes les lignes qui commencent par un s et se terminent par un 5.
# sed -n '/^s.*5$/p' data.txt southern SO May Chin 45
Utiliser sed pour remplacer le texte
Commande | Exemple | Action de modification |
---|---|---|
s | sed s/x/y/option | Rechercher et remplacer. Le motif de recherche x est remplacé par le motif y. La recherche et le modèle de remplacement sont des expressions régulières dans la plupart des cas, et le comportement de recherche et de remplacement peut être influencé par diverses options. |
y | sed y/abc/xyz/ | Remplacez chaque caractère du jeu de caractères source par le caractère qui a la même position dans le jeu de caractères de destination. |
Exemple 1 :Rechercher et substituer un modèle spécifique
Les s sed La commande permet d'effectuer une opération de recherche et de substitution sur le texte. La commande utilise une recherche de modèle et un remplacement de chaîne littérale. Les caractères de la chaîne de remplacement sont pris littéralement sans extension de métacaractère.
# sed 's/3/X/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster X3 southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
La commande sed vérifie chaque ligne du fichier et remplace la première occurrence de l'ancienne chaîne par la nouvelle chaîne. Les occurrences suivantes de l'ancienne chaîne dans la même ligne restent inchangées.
Exemple 2 : Rechercher et remplacer globalement un motif spécifique
L'exemple suivant montre le g (global) commande avec les s (rechercher et remplacer) commande, et elle remplace toutes les occurrences de l'ancienne chaîne par la nouvelle chaîne.
# sed 's/3/X/g' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster XX southern SO May Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Exemple 3 :Recherche et substitution avec motif de recherche inclus dans la substitution
Parfois, avec une recherche et un substitut, l'ancienne chaîne fera partie de la nouvelle chaîne de remplacement, ce que vous pouvez accomplir en plaçant un &(esperluette) dans la chaîne de remplacement. L'emplacement du &détermine l'emplacement de l'ancienne chaîne dans la chaîne de remplacement.
L'objectif des exemples suivants est d'écrire une commande qui recherche toutes les lignes qui se terminent par un seul chiffre dans le dernier champ et remplace le chiffre unique par le nombre à un chiffre plus la chaîne Chiffre unique.
Pour identifier correctement les lignes avec des nombres à un chiffre dans le dernier champ, considérez la commande sed suivante. Des onglets séparent les champs avec chaque ligne.
sed -n '/ [0-9]$/p' data.txt southeast SE Derek Johnson 3
La commande suivante recherche toutes les lignes qui se terminent par un seul chiffre dans le dernier champ et remplace le chiffre unique par le nombre à un chiffre plus la chaîne Chiffre unique.
# sed 's/ [0-9]$/& Single Digit/' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 Single Digit eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Utiliser sed pour supprimer du texte
Exemple 1 :Supprimer une plage de lignes
La commande suivante supprime les lignes 4 à 8 de la sortie.
# sed '4,8d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 central CT Sheri Watson 44
Exemple 2 :Suppression de lignes contenant un motif spécifique
La commande suivante supprime toute ligne contenant le motif ouest.
# sed '/west/d' data.txt southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Exemple 3
La commande suivante supprime toute ligne commençant par le motif ouest.
# sed '/^west/d' data.txt northwest NW Joel Craig 10 southwest SW Chris Foster 33 southern SO May Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
Exemple 4
La commande suivante supprime la plage de lignes commençant par la première ligne contenant le motif sud, jusqu'à la ligne suivante du fichier contenant le nord.
# sed '/south/,/north/d' data.txt northwest NW Joel Craig 10 western WE Sharon Kelly 40 north NO Val Shultz 91 central CT Sheri Watson 44
Fonctionnalité sed supplémentaire - Commandes d'édition
Des commandes supplémentaires de l'éditeur sed sont présentées dans le tableau suivant.
Commande | Fonction |
---|---|
un | Ajoute du texte |
c | Change le texte de la ligne actuelle avec un nouveau texte |
je | Insère du texte au-dessus de la ligne actuelle |
Placer plusieurs modifications dans une seule commande sed
Il arrive parfois que vous souhaitiez effectuer plusieurs modifications sur le fichier. Plutôt que d'utiliser plusieurs commandes sed, vous pouvez utiliser l'option -e pour placer les modifications dans la même ligne de commande. Les modifications sont effectuées dans l'ordre que vous spécifiez.
Exemple 1
Supprimez soigneusement les lignes. Vous pouvez effectuer des modifications sur une ligne de texte, puis supprimer cette ligne de texte de la sortie. Cela se produit dans l'exemple suivant avec la ligne 1 du fichier d'entrée.
# sed -e 's/north/North/' -e '1,4d' data.txt southeast SE Derek Johnson 3 eastern EA Susan Beal 34 Northeast NE TJ Nichols 67 North NO Val Shultz 91 central CT Sheri Watson 44