GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la commande Linux sed

Peu de commandes Unix sont aussi célèbres que sed, grep et awk. Ils sont souvent regroupés, peut-être parce qu'ils ont des noms étranges et de puissants outils d'analyse de texte. Ils partagent également certaines similitudes syntaxiques et logiques. Et bien qu'ils soient tous utiles pour l'analyse de texte, chacun a ses spécialités. Cet article examine le sed command, qui est un éditeur de flux .

J'ai déjà écrit sur sed, ainsi que sur son parent éloigné ed. Pour se familiariser avec sed, il est utile de se familiariser avec ed car cela vous aide à vous habituer à l'idée des tampons. Cet article suppose que vous connaissez les bases de sed, ce qui signifie que vous avez au moins exécuté le classique s/foo/bar/ commande de recherche et de remplacement de style.

[Téléchargez notre aide-mémoire sed gratuit]

Installation de sed

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Si vous utilisez Linux, BSD ou macOS, GNU ou BSD sed est déjà installé. Ce sont des réimplémentations uniques du sed d'origine commande, et bien qu'ils soient similaires, il existe des différences mineures. Cet article a été testé sur les versions Linux et NetBSD, vous pouvez donc utiliser n'importe quel sed que vous trouvez sur votre ordinateur dans ce cas, bien que pour BSD sed vous devez utiliser des options courtes (-n au lieu de --quiet , par exemple) uniquement.

GNU sed est généralement considéré comme le sed le plus riche en fonctionnalités disponible, vous pouvez donc l'essayer, que vous utilisiez Linux ou non. Si vous ne trouvez pas GNU sed (souvent appelé gsed sur les systèmes non-Linux) dans votre arborescence de ports, vous pouvez télécharger son code source depuis le site Web GNU. L'avantage d'installer GNU sed est que vous pouvez utiliser ses fonctions supplémentaires mais aussi le contraindre à se conformer aux spécifications POSIX de sed, si vous avez besoin de portabilité.

Les utilisateurs de MacOS peuvent trouver GNU sed sur MacPorts ou Homebrew.

Sous Windows, vous pouvez installer GNU sed avec Chocolatey.

Comprendre l'espace de motif et l'espace de maintien

Sed fonctionne sur exactement une ligne à la fois. Parce qu'il n'a pas d'affichage visuel, il crée un espace de motif , un espace en mémoire contenant la ligne actuelle du flux d'entrée (avec tout caractère de fin de ligne supprimé). Une fois que vous avez rempli l'espace de modèle, sed exécute vos instructions. Lorsqu'il atteint la fin des commandes, sed imprime le contenu de l'espace de modèle dans le flux de sortie. Le flux de sortie par défaut est stdout , mais la sortie peut être redirigée vers un fichier ou même dans le même fichier en utilisant le --in-place=.bak option.

Ensuite, le cycle recommence avec la ligne de saisie suivante.

Pour offrir un peu de flexibilité lorsque vous parcourez les fichiers avec sed, sed fournit également un espace de maintien (parfois aussi appelé tampon de maintien ), un espace dans la mémoire de sed réservé au stockage temporaire des données. Vous pouvez considérer l'espace de maintien comme un presse-papiers, et en fait, c'est exactement ce que cet article démontre :comment copier/couper et coller avec sed.

Tout d'abord, créez un exemple de fichier texte avec ce texte comme contenu :

Line one
Line three
Line two

Copier des données pour conserver l'espace

Pour placer quelque chose dans l'espace de stockage de sed, utilisez le h ou H commande. Un h minuscule indique à sed d'écraser le contenu actuel de l'espace de maintien, tandis qu'un H majuscule lui dit d'ajouter des données à tout ce qui est déjà dans l'espace de maintien.

Utilisé seul, il n'y a pas grand chose à voir :

$ sed --quiet -e '/three/ h' example.txt
$

Le --quiet (-n pour faire court) l'option supprime toutes les sorties mais ce que sed a effectué pour mes besoins de recherche. Dans ce cas, sed sélectionne n'importe quelle ligne contenant la chaîne three , et en le copiant pour conserver l'espace. Je n'ai pas dit à sed d'imprimer quoi que ce soit, donc aucune sortie n'est produite.

Copier des données depuis l'espace de conservation

Pour avoir un aperçu de l'espace de maintien, vous pouvez copier son contenu depuis l'espace de maintien et le placer dans l'espace de modèle avec le g commande. Regardez ce qui se passe :

$ sed -n -e '/three/h' -e 'g;p' example.txt

Line three
Line three

La première ligne vierge s'imprime car l'espace de maintien est vide lorsqu'il est copié pour la première fois dans l'espace du motif.

Les deux lignes suivantes contiennent Line three car c'est ce qu'il y a dans l'espace réservé à partir de la deuxième ligne.

Cette commande utilise deux scripts uniques (-e ) uniquement pour faciliter la lisibilité et l'organisation. Il peut être utile de diviser les étapes en scripts individuels, mais techniquement, cette commande fonctionne aussi bien qu'une seule instruction de script :

$ sed -n -e '/three/h ; g ; p' example.txt

Line three
Line three

Ajout de données à l'espace de modèle

Le G La commande ajoute un caractère de saut de ligne et le contenu de l'espace de maintien à l'espace du motif.

$ sed -n -e '/three/h' -e 'G;p' example.txt
Line one

Line three
Line three
Line two
Line three

Les deux premières lignes de cette sortie contiennent à la fois le contenu de l'espace de modèle (Line one ) et l'espace de cale vide. Les deux lignes suivantes correspondent au texte de recherche (three ), il contient donc à la fois l'espace du motif et l'espace de maintien. L'espace de maintien ne change pas pour la troisième paire de lignes, donc l'espace du motif (Line two ) s'imprime avec l'espace de maintien (toujours Line three ) à la fin.

Couper-coller avec sed

Maintenant que vous savez comment jongler avec une chaîne à partir d'un motif pour conserver l'espace et inversement, vous pouvez concevoir un script sed qui copie, puis supprime, puis colle une ligne dans un document. Par exemple, le fichier d'exemple de cet article a Line three hors service. Sed peut résoudre ce problème :

$ sed -n -e '/three/ h' -e '/three/ d' \
-e '/two/ G;p' example.txt
Line one
Line two
Line three
  • Le premier script trouve une ligne contenant la chaîne three et le copie de l'espace de motif vers l'espace de maintien, en remplaçant tout ce qui se trouve actuellement dans l'espace de maintien.
  • Le deuxième script supprime toute ligne contenant la chaîne three . Ceci complète l'équivalent d'une coupe action dans un traitement de texte ou un éditeur de texte.
  • Le script final trouve une ligne contenant two et ajoute le contenu de l'espace de maintien dans l'espace du motif, puis imprime l'espace du motif.

Travail terminé.

Script avec sed

Encore une fois, l'utilisation d'instructions de script séparées est purement pour la simplicité visuelle et mentale. La commande couper-coller fonctionne comme un seul script :

$ sed -n -e '/three/ h ; /three/ d ; /two/ G ; p' example.txt
Line one
Line two
Line three

Il peut même être écrit sous la forme d'un fichier de script dédié :

#!/usr/bin/sed -nf

/three/h
/three/d
/two/ G
p

Pour exécuter le script, marquez-le comme exécutable et essayez-le sur votre exemple de fichier :

$ chmod +x myscript.sed
$ ./myscript.sed example.txt
Line one
Line two
Line three

Bien sûr, plus le texte que vous devez analyser est prévisible, plus il est facile de résoudre votre problème avec sed. Il n'est généralement pas pratique d'inventer des "recettes" pour les actions sed (comme un copier-coller) car la condition pour déclencher l'action est probablement différente d'un fichier à l'autre. Cependant, plus vous maîtrisez les commandes de sed, plus il est facile de concevoir des actions complexes basées sur l'entrée que vous devez analyser.

Les choses importantes sont de reconnaître des actions distinctes, de comprendre quand sed passe à la ligne suivante et de prédire ce que le modèle et l'espace de maintien peuvent contenir.

Télécharger la feuille de triche

Sed est complexe. Il n'a qu'une douzaine de commandes, mais sa syntaxe flexible et sa puissance brute signifient qu'il est plein de potentiel infini. J'avais l'habitude de référencer des pages de lignes simples intelligentes dans le but de tirer le meilleur parti de sed, mais ce n'est que lorsque j'ai commencé à inventer (et parfois à réinventer) mes propres solutions que j'ai eu l'impression de commencer à en fait apprendre sed. Si vous recherchez des rappels en douceur des commandes et des conseils utiles sur la syntaxe, téléchargez notre aide-mémoire sed et commencez à apprendre sed une fois pour toutes !


Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande history sous Linux

  3. Comment utiliser la commande Su sous Linux

  4. Comment utiliser la commande id sous Linux

  5. Comment utiliser la commande "screen" sous Linux

Comment utiliser la commande Linux Ping

Comment utiliser la commande fd sur le système Linux

Comment utiliser la commande wget sous Linux ?

Comment utiliser la commande xargs sous Linux ?

Comment utiliser la commande RPM sous Linux

Comment utiliser la commande which sous Linux