31+ Exemples pour la commande sed Linux dans la manipulation de texte

Dans le post précédent, nous avons parlé des fonctions bash et comment les utiliser directement depuis la ligne de commande, et nous avons vu d’autres trucs sympas. Aujourd’hui, nous allons parler d’un outil pratique pour la manipulation des chaînes de caractères appelé sed ou commande sed Linux.

Nous utilisons sed pour travailler avec des fichiers texte comme les fichiers journaux, les fichiers de configuration et d’autres fichiers texte.

Dans ce post, nous allons nous concentrer sur la commande sed Linux, qui est utilisée pour la manipulation de texte, ce qui est une étape essentielle dans notre voyage de script bash.

Le système Linux fournit certains outils pour le traitement de texte ; l’un de ces outils est sed.

Nous allons discuter des 31+ exemples avec des images pour montrer la sortie de chaque exemple.

Table des matières

Comprendre la commande sed Linux

La commande sed est un éditeur de texte non interactif. La commande sed Linux édite les données en fonction des règles que vous fournissez ; vous pouvez l’utiliser comme ceci :

$ sed options file

Vous n’êtes pas limité à utiliser sed pour manipuler des fichiers ; vous l’appliquez directement au STDIN comme ceci :

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

commande sed Linux

La commande s remplace le premier texte par le second motif de texte. Dans ce cas, nous avons remplacé la chaîne « site web » par le mot « page ».

L’exemple ci-dessus était un exemple simple pour démontrer l’outil. Nous pouvons également utiliser la commande Linux sed pour manipuler des fichiers.

Créons un fichier exemple :

sed manipulate file

$ sed 's/test/another test/' ./myfile

Les résultats sont imprimés à l’écran instantanément ; vous n’avez pas à attendre le traitement du fichier jusqu’à la fin.

Si votre fichier est suffisamment massif, vous verrez le résultat avant que le traitement ne soit terminé.

La commande SED Linux ne met pas à jour vos données. Elle envoie seulement le texte modifié à STDOUT. Le fichier n’est toujours pas touché. Si vous avez besoin d’écraser le contenu existant, vous pouvez consulter notre précédent post, qui parlait des redirections.

Utiliser plusieurs commandes sed Linux dans la ligne de commande

Pour exécuter plusieurs commandes sed, vous pouvez utiliser l’option -e comme ceci :

$ sed -e 's/This/That/; s/test/another test/' ./myfile

sed plusieurs commandes

Vous devez séparer les commandes sed par un point-virgule sans espace.

Vous pouvez également utiliser un guillemet simple pour séparer les commandes comme ceci :

$ sed -e '> s/This/That/> s/test/another test/' myfile

sed commandes séparées

Le même résultat, pas de problème.

Lecture de commandes depuis un fichier

Vous pouvez enregistrer vos commandes sed dans un fichier et les utiliser en spécifiant le fichier à l’aide de l’option -f.

$ cat mycommandss/This/That/s/test/another test/
$ sed -f mycommands myfile

lire des commandes depuis un fichier

Substituer des drapeaux

Regardez attentivement l’exemple suivant :

$ cat myfile
$ sed 's/test/another test/' myfile

sed substitute flag

Le résultat ci-dessus montre que nous avons remplacé la première occurrence dans chaque ligne. Pour remplacer toutes les occurrences d’un motif, utilisez l’un des drapeaux de substitution suivants.

Nous pouvons écrire les drapeaux comme ceci :

s/pattern/replacement/flags

Il existe quatre types de substitutions :

  • g, remplacer toutes les occurrences.
  • Un nombre, le numéro d’occurrence du nouveau texte que vous voulez remplacer.
  • p, imprimer le contenu original.
  • w fichier : signifie écrire les résultats dans un fichier.

Vous pouvez limiter votre remplacement en spécifiant le numéro d’occurrence qui doit être remplacé comme ceci :

$ sed 's/test/another test/2' myfile

sed number flag

Comme vous pouvez le voir, nous avons remplacé uniquement la deuxième occurrence sur chaque ligne.

Le drapeau g signifie global, ce qui signifie un remplacement global pour toutes les occurrences:

$ sed 's/test/another test/g' myfile

sed global flag

Le drapeau p imprime chaque ligne contient une correspondance de motif, vous pouvez utiliser l’option -n pour imprimer uniquement les lignes modifiées.

$ cat myfile
$ sed -n 's/test/another test/p' myfile

sed supress lines

Le drapeau w enregistre la sortie dans un fichier spécifié :

$ sed 's/test/another test/w output' myfile

envoyer la sortie dans un fichier

Nous avons imprimé la sortie à l’écran, mais nous avons enregistré les lignes correspondantes dans le fichier de sortie.

Remplacer des caractères

Supposons que vous vouliez rechercher le shell bash et le remplacer par le shell csh dans le fichier /etc/passwd en utilisant sed, eh bien, vous pouvez le faire facilement :

$ sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd

Oh ! !! cela a l’air terrible.

Heureusement, il existe une autre façon d’y parvenir. Vous pouvez utiliser le point d’exclamation ( !) comme délimiteur de chaîne de caractères comme ceci:

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

Maintenant, c’est plus facile à lire.

Limiter sed

La commande sed traite l’intégralité de votre fichier. Cependant, vous pouvez limiter la commande sed pour qu’elle traite des lignes spécifiques ; il existe deux façons :

  • Une plage de lignes.
  • Un motif qui correspond à une ligne spécifique.

Vous pouvez taper un chiffre pour le limiter à une ligne spécifique:

$ sed '2s/test/another test/' myfile

sed restricted

Nous avons modifié uniquement la ligne deux.

Et si on utilisait une plage de lignes :

$ sed '2,3s/test/another test/' myfile

remplacer la plage de lignes

On peut aussi partir d’une ligne jusqu’à la fin du fichier :

$ sed '2,$s/test/another test/' myfile

sed remplacer jusqu'à la fin

Ou vous pouvez utiliser un motif comme celui-ci :

$ sed '/likegeeks/s/bash/csh/' /etc/passwd

sed pattern match

Awesome !!

Vous pouvez utiliser des expressions régulières pour écrire ce motif afin qu’il soit plus générique et utile.

Supprimer des lignes

Pour supprimer des lignes en utilisant sed, vous pouvez utiliser le drapeau delete (d) est votre ami.

Le drapeau delete supprime le texte du flux, pas le fichier d’origine.

$ sed '2d' myfile

sed delete line

Ici, nous supprimons la deuxième ligne seulement de monfichier.

Qu’en est-il de la suppression d’une plage de lignes ?

$ sed '2,3d' myfile

supprimer plusieurs lignes

Ici, nous supprimons une plage de lignes, la deuxième et la troisième.

Un autre type de plages :

$ sed '3,$d' myfile

supprimer jusqu'à la fin

Ici nous supprimons de la troisième ligne à la fin du fichier.

Tous ces exemples ne modifient jamais votre fichier original.

$ sed '/test 1/d' myfile

delete pattern match

Ici, nous utilisons un motif pour supprimer la ligne s’il correspond à la première ligne.

Si vous devez supprimer une plage de lignes, vous pouvez utiliser deux motifs de texte comme ceci :

$ sed '/second/,/fourth/d' myfile

supprimer une plage de lignes

Nous avons supprimé de la deuxième à la quatrième ligne.

Insérer et ajouter du texte

Vous pouvez insérer ou ajouter des lignes de texte en utilisant les drapeaux suivants :

  • Le drapeau (i).
  • Le drapeau (a).
$ echo "Another test" | sed 'i\First test '

sed insérer du texte

Nous avons ajouté le texte avant la ligne spécifiée.

$ echo "Another test" | sed 'a\First test '

sed append

Nous avons ajouté le texte après la ligne spécifiée.

Et si on ajoutait du texte au milieu ?

Facile, regardez l’exemple suivant :

$ sed '2i\This is the inserted line.' myfile

sed insert line

Et l’ajout fonctionne de la même manière, mais regardez la position du texte ajouté :

$ sed '2a\This is the appended line.' myfile

sed append line

Nous avons utilisé les mêmes drapeaux mais avec un emplacement d’insertion ou d’ajout.

Modification des lignes

Pour modifier une ligne spécifique, vous pouvez utiliser le drapeau (c) comme ceci:

$ sed '3c\This is a modified line.' myfile

sed modify line

Vous pouvez utiliser un motif d’expression régulière, et toutes les lignes correspondant à ce motif seront modifiées.

$ sed '/This is/c Line updated.' myfile

sed pattern match

Transformer les caractères

Le drapeau de transformation (y) fonctionne sur des caractères comme celui-ci :

$ sed 'y/123/567/' myfile

sed transform character

Nous avons appliqué la transformation à toutes les données, et nous ne pouvons pas la limiter à une occurrence spécifique.

Imprimer les numéros de ligne

Vous pouvez imprimer le numéro de ligne en utilisant le signe (=) comme ceci :

$ sed '=' myfile

sed numéros de ligne

Cependant, en utilisant -n combiné au signe égal, la commande sed affiche le numéro de ligne qui contient la correspondance.

$ sed -n '/test/=' myfile

cacher les lignes

Lire les données d’un fichier

Vous pouvez utiliser le drapeau (r) pour lire les données d’un fichier.

Vous pouvez définir un numéro de ligne ou un modèle de texte pour le texte que vous voulez lire.

$ cat newfile
$ sed '3r newfile' myfile

lire les données d'un fichier

Nous avons inséré le contenu après la troisième ligne comme prévu.

Et voici l’utilisation d’un motif textuel :

$ sed '/test/r newfile' myfile

lire le motif de correspondance

Cool non ?

Exemples utiles

Supposons que nous avons un fichier qui contient du texte avec un espace réservé, et que nous avons un autre fichier qui contient les données qui rempliront l’espace réservé sur l’autre fichier.

Nous utiliserons les drapeaux (r) et (d) pour faire le travail.

Le mot DATA dans ce fichier est un espace réservé pour un contenu réel que nous stockerons dans un autre fichier appelé data.

Nous allons le remplacer par le contenu réel :

$ Sed '/DATA>/ {r newfiled}' myfile

repalce placeholder

Awesome ! !! comme vous pouvez le voir, nous avons rempli l’emplacement placeholder avec les données de l’autre fichier.

Ce n’est qu’une petite intro sur la commande sed. La commande sed Linux est un autre monde en soi.

La seule limite est votre imagination.

J’espère que vous trouverez facile de manipuler des chaînes de caractères en utilisant la commande sed Linux.

Merci.

Fondateur de LikeGeeks. Je travaille en tant qu’administrateur système Linux depuis 2010. Je suis responsable de la maintenance, de la sécurisation et du dépannage des serveurs Linux pour plusieurs clients dans le monde. J’adore écrire des scripts shell et Python pour automatiser mon travail.

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *