GNU/Linux >> Tutoriels Linux >  >> Linux

Introduction à sed (Stream Editor) :Exemples utiles de commandes sed

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


Linux
  1. 12 exemples de commandes Wget utiles sous Linux

  2. Commande ls sous Linux :17 exemples utiles expliqués

  3. Exemples utiles de la commande Docker ps

  4. 10 Exemples de commande Sed (éditeur de flux)

  5. Exemples de commandes sed sous Linux

Exemples de commandes Wget utiles dans le système Linux

15 exemples utiles de commande touch dans le système Linux

Les 50 exemples pratiques de la commande SED sous Linux

9 exemples utiles de commande tactile sous Linux

10 exemples utiles de la commande Sort sous Linux

12 exemples de commandes de date Linux utiles