Éditeur de flux - Commandes de base

Ce chapitre décrit plusieurs commandes SED utiles.

Supprimer la commande

SED fournit diverses commandes pour manipuler le texte. Laissez-nous d'abord explorer ledeletecommander. Voici comment exécuter une commande de suppression:

[address1[,address2]]d

address1 et address2sont respectivement les adresses de début et de fin, qui peuvent être des numéros de ligne ou des chaînes de motifs. Ces deux adresses sont des paramètres facultatifs.

Comme son nom l'indique, la commande de suppression est utilisée pour effectuer l'opération de suppression et comme le SED fonctionne en ligne, nous pouvons dire que cette commande est utilisée pour supprimer des lignes. Notez que la commande de suppression supprime les lignes uniquement du tampon de motif; la ligne n'est pas envoyée au flux de sortie et le fichier d'origine reste inchangé. L'exemple suivant illustre ce point.

[jerry]$ sed 'd' books.txt

Mais où est la sortie? Si aucune adresse de ligne n'est fournie, le SED fonctionne par défaut sur chaque ligne. Par conséquent, il supprime toutes les lignes du tampon de motifs. C'est pourquoi la commande n'imprime rien sur la sortie standard.

Donnons instruction au SED de n'opérer que sur certaines lignes. L'exemple suivant supprime uniquement la 4ème ligne.

[jerry]$ sed '4d' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

De plus, SED accepte également la plage d'adresses utilisant la virgule (,). Nous pouvons demander au SED de supprimer les lignes N1 à N2. Par exemple, l'exemple suivant supprime toutes les lignes de 2 à 4.

[jerry]$ sed '2, 4 d' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

La plage d'adresses de SED n'est pas seulement limitée aux nombres. Nous pouvons également spécifier des modèles comme adresse. L'exemple suivant supprime tous les livres de l'auteur Paulo Coelho.

[jerry]$ sed '/Paulo Coelho/d' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Nous pouvons également spécifier une plage d'adresses à l'aide d'un modèle textuel. L'exemple suivant supprime toutes les lignes entre les motifsStorm et Fellowship.

[jerry]$ sed '/Storm/,/Fellowship/d' books.txt  
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

En plus de cela, nous pouvons également utiliser les opérateurs dollar ($), plus (+) et tilde (~) avec SED.

Commande d'écriture

L'une des opérations importantes que nous effectuons sur n'importe quel fichier est la sauvegarde, c'est-à-dire que nous faisons une autre copie du fichier. SED fournit lewritecommande pour stocker le contenu du tampon de motif dans un fichier. Ci-dessous, la syntaxe duwrite commande qui est similaire à la delete commander.

[address1[,address2]]w file

Ici, address1 et address2sont respectivement l'adresse de début et l'adresse de fin, qui peuvent être des numéros de ligne ou des chaînes de motifs. Ces deux adresses sont des paramètres facultatifs.

Dans la syntaxe ci-dessus, w fait référence à la commande d'écriture et fileest le nom du fichier dans lequel vous stockez le contenu. Soyez prudent avec lefileparamètre. Lorsqu'un nom de fichier est fourni, le SED crée un fichier à la volée s'il n'est pas présent et l'écrase s'il est déjà présent.

Faisons une copie exacte du fichier en utilisant SED. Notez qu'il doit y avoir exactement un espace entrew et file.

[jerry]$ sed -n 'w books.bak' books.txt

Nous avons créé un autre fichier appelé books.bak. Vérifiez maintenant que les deux fichiers ont un contenu identique.

[jerry]$ diff books.txt books.bak  
[jerry]$ echo $?

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

0

Vous pouvez supposer que le cpLa commande fait exactement la même chose. Oui! lecpcommande fait la même chose, mais SED est un utilitaire mûr. Il permet de créer un fichier contenant uniquement certaines lignes du fichier source. Stockons uniquement les lignes paires dans un autre fichier.

[jerry]$ sed -n '2~2 w junk.txt' books.txt  
[jerry]$ cat junk.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Vous pouvez également utiliser les opérateurs virgule (,), dollar ($) et plus (+) avec la commande write.

En plus de cela, SED prend également en charge la correspondance de modèles avec la commande d'écriture. Supposons que vous souhaitiez stocker tous les livres d'auteurs individuels dans un fichier séparé. Une manière ennuyeuse et longue est de le faire manuellement, et la manière la plus intelligente est d'utiliser SED.

[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w 
Tolkien.txt' books.txt

Dans l'exemple ci-dessus, nous comparons chaque ligne à un modèle et stockons la ligne correspondante dans un fichier particulier. C'est très simple. Pour spécifier plusieurs commandes, nous avons utilisé-ecommutateur de la commande SED. Voyons maintenant ce que contient chaque fichier:

[jerry]$ cat Martin.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
6) A Game of Thrones, George R. R. Martin, 864

Laissez-nous afficher le contenu du fichier.

[jerry]$ cat Paulo.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Laissez-nous afficher le contenu du fichier.

[jerry]$ cat Tolkien.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432

Excellent! Nous avons obtenu le résultat attendu. SED est vraiment un utilitaire incroyable.

Ajouter la commande

L'une des opérations les plus utiles de tout éditeur de texte est de fournir une fonctionnalité d'ajout. SED prend en charge cette opération via sa commande append. Voici la syntaxe de append:

[address]a\ 
Append text

Ajoutons une nouvelle entrée de livre après la ligne numéro 4. L'exemple suivant montre comment le faire

[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Dans la section commande, 4 implique le numéro de ligne, a est la commande append, et la partie restante est le texte à ajouter.

Insérons une ligne de texte à la fin du fichier. Pour ce faire, utilisez$comme adresse. L'exemple suivant illustre ceci:

[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 
7) Adultry, Paulo Coelho, 234

Outre le numéro de ligne, nous pouvons également spécifier une adresse à l'aide d'un motif textuel. Par exemple, l'exemple suivant ajoute du texte après avoir fait correspondre la chaîneThe Alchemist.

[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Notez que s'il existe plusieurs modèles correspondants, le texte est ajouté après chaque correspondance. L'exemple suivant illustre ce scénario.

[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
7) Adultry, Paulo Coelho, 234 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 234 
6) A Game of Thrones, George R. R. Martin, 864

Changer de commande

SED fournit change ou replacecommande qui est représentée par c. Cette commande permet de remplacer une ligne existante par un nouveau texte. Lorsque la plage de lignes est fournie, toutes les lignes sont remplacées en tant que groupe par une seule ligne de texte. Voici la syntaxe de la commande de changement:

[address1[,address2]]c\ 
Replace text

Remplaçons la troisième ligne par un autre texte.

[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SED accepte également les modèles comme adresse. Dans l'exemple suivant, une ligne est remplacée lorsque la correspondance de modèle réussit.

[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SED permet également le remplacement de plusieurs lignes par une seule ligne. L'exemple suivant supprime les lignes de la quatrième à la sixième et les remplace par un nouveau texte.

[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) Adultry, Paulo Coelho, 324

Insérer une commande

La commande d'insertion fonctionne de la même manière que l'ajout. La seule différence est qu'il insère une ligne avant une position spécifique. Voici la syntaxe de la commande d'insertion:

[address]i\ 
Insert text

Comprenons la commande insert avec quelques exemples. La commande suivante insère une nouvelle entrée avant la quatrième ligne.

[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Dans l'exemple ci-dessus, 4 est le numéro de l'emplacement, i implique la commande d'insertion, et la partie restante est le texte à insérer.

Pour insérer du texte au début d'un fichier, indiquez l'adresse de ligne comme 1. La commande suivante illustre cela:

[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

7) Adultry, Paulo Coelho, 324
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

De plus, nous pouvons insérer plusieurs lignes. La commande suivante insère deux lignes avant la dernière ligne.

[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

8) Eleven Minutes, Paulo Coelho, 304' books.txt 
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage,Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 324 
8) Eleven Minutes, Paulo Coelho, 304 
6) A Game of Thrones, George R. R. Martin, 864

Notez que les entrées à insérer sont saisies sur des lignes séparées et délimitées par la barre oblique inverse (\).

Traduire la commande

SED fournit une commande pour traduire les caractères et il est représenté comme y. Il transforme les personnages par position. Voici la syntaxe de la commande translate:

[address1[,address2]]y/list-1/list-2/

Notez que la traduction est basée sur la position du caractère de list 1 au personnage dans la même position dans list 2et les deux listes doivent être des listes de caractères explicites. Les expressions régulières et les classes de caractères ne sont pas prises en charge. De plus, la taille delist 1 et list 2 doit être le même.

L'exemple suivant convertit les nombres arabes en nombres romains.

[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

I V IV XX

commande l

Pouvez-vous différencier les mots séparés par des espaces et les mots séparés par des tabulations uniquement en les regardant? Certainement pas. Mais SED peut le faire pour vous. SED utilise lelcommande pour afficher les caractères cachés dans le texte. Par exemple, le caractère de tabulation avec\t et End-Of-Line avec $personnage. Ci-dessous, la syntaxe dul commander.

[address1[,address2]]l 
[address1[,address2]]l [len]

Créons un fichier avec des tabulations pour démonstration. Pour plus de simplicité, nous allons utiliser le même fichier, simplement en remplaçant les espaces par des tabulations. Attendez! Mais comment faire cela - en ouvrant le fichier dans un éditeur de texte et en remplaçant chaque espace par une tabulation? Certainement pas! Nous pouvons utiliser les commandes SED pour cela.

[jerry]$ sed 's/ /\t/g' books.txt > junk.txt

Maintenant, affichons les caractères cachés en utilisant le l commander:

[jerry]$ sed -n 'l' junk.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$ 
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$ 
3)\tThe\tAlchemist,Paulo\tCoelho,197$ 
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$ 
5)\tThe\tPilgrimage,Paulo\tCoelho,288$ 
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$

Comme les autres commandes SED, il accepte également les numéros de ligne et les modèles comme adresse. Vous pouvez l'essayer vous-même.

Examinons de près une autre caractéristique intéressante de SED. Nous pouvons demander au SED d'effectuer un retour à la ligne après un certain nombre de caractères. L'exemple suivant encapsule les lignes après 25 caractères.

[jerry]$ sed -n 'l 25' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords,Geo\ 
rge R. R. Martin,1216$ 
2) The Two Towers,J. R. \ 
R. Tolkien,352$ 
3) The Alchemist,Paulo C\ 
oelho,197$ 
4) The Fellowship of the\ 
 Ring,J. R. R. Tolkien,4\ 
32$ 
5) The Pilgrimage,Paulo \ 
Coelho,288$ 
6) A Game of Thrones,Geo\ 
rge R. R. Martin ,864$

Notez que dans l'exemple ci-dessus, la limite d'enroulement est fournie après la commande l. Dans ce cas, il s'agit de 25 caractères. Cette option est spécifique à GNU et peut ne pas fonctionner avec d'autres variantes du SED.

Une limite de retour à la ligne de 0 signifie ne jamais couper la ligne à moins qu'il n'y ait un nouveau caractère de ligne. La commande simple suivante illustre cela.

[jerry]$ sed -n 'l 0' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords,George R. R. Martin,1216$ 
2) The Two Towers,J. R. R. Tolkien,352$ 
3) The Alchemist,Paulo Coelho,197$ 
4) The Fellowship of the Ring,J. R. R. Tolkien,432$ 
5) The Pilgrimage,Paulo Coelho,288$ 
6) A Game of Thrones,George R. R. Martin,864$

Commande Quitter

La commande Quit demande au SED de quitter le flux d'exécution en cours. Il est représenté par leqcommander. Ci-dessous, la syntaxe de la commande quit:

[address]q 
[address]q [value]

Notez que la commande quit n'accepte pas de plage d'adresses, elle ne prend en charge qu'une seule adresse. Par défaut, SED suit le flux de travail de lecture, d'exécution et de répétition; mais lorsque la commande quit est rencontrée, elle arrête simplement l'exécution en cours.

Imprimons les 3 premières lignes du fichier.

[jerry]$ sed '3 q' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

En plus du numéro de ligne, nous pouvons également utiliser des motifs textuels. La commande suivante se ferme lorsque la correspondance de modèle réussit.

[jerry]$ sed '/The Alchemist/ q' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

En plus de cela, SED peut également accepter un valuequi peut être utilisé comme état de sortie. La commande suivante montre son état de sortie comme 100.

[jerry]$ sed '/The Alchemist/ q 100' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

Maintenant, vérifions l'état de sortie.

[jerry]$ echo $?

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

100

Commande de lecture

Nous pouvons demander au SED de lire le contenu d'un fichier et de les afficher lorsqu'une condition spécifique correspond. La commande est représentée par l'alphabetr. Voici la syntaxe de la commande read.

[address]r file

Notez qu'il doit y avoir exactement un espace entre les r commande et le nom du fichier.

Comprenons-le avec un exemple simple. Créez un fichier d'exemple appeléjunk.txt.

[jerry]$ echo "This is junk text." > junk.txt

La commande suivante demande au SED de lire le contenu de junk.txt et insérez-les après la troisième ligne.

[jerry]$ sed '3 r junk.txt' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Dans l'exemple ci-dessus, 3 implique l'adresse de ligne, r est le nom de la commande, et junk.txtest le nom du fichier dont le contenu doit être affiché. De plus, le GNU SED accepte également une plage d'adresses. Par exemple, la commande suivante insère le contenu dejunk.txt après les troisième, quatrième et cinquième lignes.

[jerry]$ sed '3, 5 r junk.txt' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
This is junk text. 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Comme les autres commandes SED, la commande read accepte également le modèle comme adresse. Par exemple, la commande suivante insère le contenu dejunk.txt lorsque la correspondance de modèle réussit.

[jerry]$ sed '/Paulo/ r junk.txt' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

Exécuter la commande

Nous pouvons exécuter des commandes externes à partir de SED en utilisant le executecommander. Il est représenté pare. Vous trouverez ci-dessous la syntaxe de la commande execute.

[address1[,address2]]e [command]

Illustrons la commande execute avec un exemple simple. La commande SED suivante exécute UNIXdate commande avant la troisième ligne.

[jerry]$ sed '3 e date' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:04:49 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Comme les autres commandes, il accepte également les modèles comme adresse. Par exemple, l'exemple suivant exécutedatecommande lorsqu'une correspondance de modèle réussit. Notez qu'après chaque correspondance de motif, la commande est d'abord exécutée, puis le contenu du tampon de motif est affiché.

[jerry]$ sed '/Paulo/ e date' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:06:04 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Sun Sep  7 18:06:04 IST 2014 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Si vous observez la syntaxe du e commande soigneusement, vous remarquerez que commandest facultatif. Lorsqu'aucune commande n'est fournie aprèse,il traite le contenu du tampon de motif comme une commande externe. Pour illustrer cela, créons un fichier commands.txt avec quelques commandes simples.

[jerry]$ echo -e "date\ncal\nuname" > commands.txt 
[jerry]$ cat commands.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

date 
cal 
uname

Les commandes du fichier sont explicites. En l'absence decommand après e,SED exécute toutes ces commandes une par une. L'exemple simple suivant illustre cela.

[jerry]$ sed 'e' commands.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

Sun Sep  7 18:14:20 IST 2014 
   September 2014      
Su Mo Tu We Th Fr Sa   
    1  2  3  4  5  6   
 7  8  9 10 11 12 13   
14 15 16 17 18 19 20   
21 22 23 24 25 26 27   
28 29 30               
                       
Linux

Comme les autres commandes SED, la commande execute accepte également toutes les plages d'adresses valides.

Commandes diverses

Par défaut, SED fonctionne sur une seule ligne, mais il peut également fonctionner sur plusieurs lignes. Les commandes multilignes sont indiquées par des lettres majuscules. Par exemple, contrairement aun commande, le NLa commande n'efface pas et n'imprime pas l'espace du motif. Au lieu de cela, il ajoute une nouvelle ligne (\ n) à la fin de l'espace de modèle actuel et ajoute la ligne suivante du fichier d'entrée à l'espace de modèle actuel et continue avec le flux standard du SED en exécutant le reste des commandes SED. Ci-dessous, la syntaxe duN commander.

[address1[,address2]]N

Imprimons une liste de titres de livres séparés par des virgules et de leurs auteurs respectifs. L'exemple suivant illustre cela.

[jerry]$ sed 'N; s/\n/, /g' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

Laissez-nous comprendre comment fonctionne l'exemple ci-dessus. leNLa commande lit la première ligne, c'est-à-dire A Storm of Swords dans le tampon de motif et ajoute \ n suivi de la ligne suivante. L'espace de motif contient désormais une tempête d'épées\nGeorge RR Martin. Dans l'étape suivante, nous remplaçons la nouvelle ligne par une virgule.

Comme p commande, nous avons un P pour imprimer la première partie (jusqu'au retour à la ligne intégré) de l'espace de motif multiligne créé par le Ncommander. Ci-dessous, la syntaxe duP commande qui est similaire à la p commander.

[address1[,address2]]P

Dans l'exemple précédent, nous avons vu que le Ncrée une liste de titres de livres séparés par une nouvelle ligne et de leurs auteurs. N'imprimons que la première partie, c'est-à-dire uniquement les titres du livre. La commande suivante illustre cela.

[jerry]$ sed -n 'N;P' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

A Storm of Swords 
The Two Towers 
The Alchemist 
The Fellowship of the Ring 
The Pilgrimage 
A Game of Thrones

Notez qu'en l'absence de N, il se comporte comme le pcommander. La commande simple suivante illustre ce scénario.

[jerry]$ sed -n 'P' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin

En plus de cela, SED fournit également un vcommande qui vérifie la version. Si la version fournie est supérieure à la version SED installée, l'exécution de la commande échoue. Notez que cette option est spécifique à GNU et peut ne pas fonctionner avec d'autres variantes de SED. Ci-dessous, la syntaxe duv commander.

[address1[,address2]]v [version]

Tout d'abord, découvrez la version actuelle de SED.

[jerry]$ sed --version

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

sed (GNU sed) 4.2.2

Dans l'exemple suivant, la version SED est supérieure à la version 4.2.2, la commande SED abandonne donc son exécution.

[jerry]$ sed 'v 4.2.3' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

sed: -e expression #1, char 7: expected newer version of sed

Mais si la version fournie est inférieure ou égale à la version 4.2.2, la commande fonctionne comme prévu.

[jerry]$ sed 'v 4.2.2' books.txt

En exécutant le code ci-dessus, vous obtenez le résultat suivant:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones George R. R. Martin