GNU/Linux >> Tutoriels Linux >  >> Linux

Apprendre à utiliser l'éditeur de texte Sed

Créé pour la version 7 du système d'exploitation Unix original d'AT&T, le sed La commande a été incluse avec probablement tous les systèmes d'exploitation Unix et Linux depuis. Le sed l'application est un éditeur de flux , et contrairement à un éditeur de texte, il n'ouvre pas de tampon visuel dans lequel les données d'un fichier sont chargées pour traitement. Au lieu de cela, il opère sur un fichier, ligne par ligne, selon une commande tapée dans un terminal ou une série de commandes dans un script.

Installation

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, vous avez déjà GNU ou BSD sed installée. Il s'agit de deux réimplémentations uniques du sed d'origine. commande, et bien qu'ils soient similaires, il peut y avoir des différences mineures. GNU sed est généralement considéré comme le sed le plus riche en fonctionnalités là-bas, et il est largement disponible sur l'une de ces plates-formes.

Si vous ne trouvez pas GNU sed (souvent appelé gsed sur les systèmes autres que Linux), vous pouvez alors télécharger son code source à partir du site Web GNU. La bonne chose à propos d'avoir GNU sed installé est qu'il peut être utilisé pour ses fonctions supplémentaires, mais il peut également être contraint de se conformer uniquement aux spécifications POSIX de sed , si vous avez besoin de portabilité.

Sous Windows, vous pouvez installer GNU sed avec du chocolat.

Comment fonctionne Sed

Le sed l'application fonctionne sur une ligne à la fois. Parce qu'il n'a pas d'affichage visuel, il crée un espace de modèle - 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 l'espace de modèle rempli, vos instructions pour sed sont exécutés. Parfois, vos commandes sont conditionnelles, et d'autres fois elles sont absolues, donc les résultats de ces commandes dépendent de la façon dont vous utilisez sed .

Lorsque la fin des commandes est atteinte, 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 il peut être redirigé vers un fichier ou même renvoyé dans le même fichier à l'aide de --in-place=.bak option.

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

La syntaxe du sed la commande est :

$ sed --options [optional SCRIPT] [INPUT FILE or STREAM] 

Rechercher ce que vous souhaitez modifier

Dans un éditeur visuel, vous localisez généralement ce que vous souhaitez modifier dans un fichier texte sans trop y penser. Votre œil (ou lecteur d'écran) scanne le texte, trouve le mot que vous souhaitez modifier ou l'endroit où vous souhaitez insérer ou supprimer du texte, puis vous commencez simplement à taper. Il n'y a pas de mode interactif pour sed , cependant, vous devez donc lui dire quelles conditions doivent être remplies pour qu'il puisse exécuter des commandes spécifiques.

Pour ces exemples, supposons qu'un fichier appelé example.txt contient ce texte :

bonjour
monde
C'est la troisième ligne.
Voici la dernière ligne.

Numéro de ligne

Spécifier un numéro de ligne indique sed pour fonctionner uniquement sur cette ligne spécifique dans le fichier.

Par exemple, cette commande sélectionne la ligne 1 d'un fichier et l'imprime. Parce que sed L'action par défaut de après le traitement consiste également à imprimer une ligne sur stdout , cela a pour effet de dupliquer la première ligne :

$ sed ‘1p’ example.txt
bonjour
bonjour
monde
Ceci est la troisième ligne.
Voici la dernière ligne.

Vous pouvez également spécifier les numéros de ligne par étapes. Par exemple, 1~2 indique que toutes les 2 lignes sont sélectionnées ("sélectionner toutes les deux lignes en commençant par la première"). L'instruction 1~3 signifie sélectionner toutes les trois lignes après la première :

$ sed '1p' example.txt
bonjour
bonjour
monde
C'est la troisième ligne.
Voici la dernière ligne.
Ici est la dernière ligne.

Position de la ligne

Vous ne pouvez opérer que sur la dernière ligne d'un fichier en utilisant $ en tant que sélecteur :

$ sed '$p' example.txt
hello
world
Ceci est la troisième ligne.
Voici la dernière ligne.
Voici la dernière ligne .

Dans GNU sed , vous pouvez sélectionner plusieurs lignes (sed '1,$p' imprime la première et la dernière ligne, par exemple).

Négation

Toute sélection par numéro ou position, vous pouvez inverser avec le point d'exclamation (! ) personnage. Cela sélectionne toutes les lignes sauf la première ligne :

$ sed '1!p' example.txt
hello
world
world
Ceci est la ligne trois.
Ceci est la ligne trois.
Voici la dernière ligne.
Voici la dernière ligne.

Correspondance de modèle

Vous pouvez considérer une correspondance de modèle comme une découverte opération dans un traitement de texte ou un navigateur. Vous fournissez un mot (un modèle ), et les résultats sont sélectionnés. La syntaxe d'une correspondance de modèle est /pattern/ .

$ sed '/hello/p' example.txt
bonjour
bonjour
monde
Ceci est la troisième ligne.
Voici la dernière ligne.
$ sed '/line/p' example.txt
hello
world
Ceci est la ligne trois.
Ceci est la ligne trois.
Voici la dernière ligne .
Voici la dernière ligne.

Montage avec Sed

Une fois que vous avez trouvé ce que vous voulez modifier, vous pouvez effectuer l'action que vous souhaitez. Vous effectuez des modifications avec sed avec des commandes. Commandes dans sed sont différents du sed commande lui-même. Si cela vous aide, considérez-les comme des "actions", des "verbes" ou des "instructions".

Commandes dans sed sont des lettres simples, comme le p pour imprimer commande utilisée dans les exemples précédents. Ils peuvent être difficiles à retenir au début, mais comme pour tout, vous apprenez à les connaître avec la pratique.

p pour impression

Le p l'instruction imprime tout ce qui est actuellement contenu dans l'espace du motif.

d pour supprimer

Le d l'instruction supprime l'espace du motif.

$ sed '$d' example.txt
bonjour
world
Ceci est la troisième ligne.
$ sed '1d' example.txt
world
Voici la troisième ligne.
Voici la dernière ligne.

s pour rechercher et remplacer

Les s La commande recherche un motif et le remplace par autre chose. C'est probablement l'utilisation la plus populaire et la plus occasionnelle de sed , et c'est souvent le premier (et parfois le seul) sed commande qu'un utilisateur apprend. C'est certainement la commande la plus utile pour l'édition de texte.

$ sed ‘s/world/opensource.com/’
bonjour
opensource.com
Ceci est la troisième ligne.
Voici la dernière ligne.

Il existe également des fonctions spéciales que vous pouvez utiliser dans votre texte de remplacement. Par exemple, \L transforme le texte de remplacement en minuscules et \l fait de même pour le caractère suivant uniquement. Il y en a d'autres, qui sont répertoriés dans le sed documentation (vous pouvez la voir avec le info sed commande).

Le caractère spécial & dans la clause de remplacement fait référence au modèle correspondant :

$ sed ‘s/is/\U&/’ example.txt
bonjour
monde
Voici la ligne trois.
Voici la dernière ligne.

Vous pouvez également transmettre des indicateurs spéciaux pour affecter la façon dont s traite ce qu'il trouve. Le g (pour global , vraisemblablement) flag indique s pour appliquer le remplacement à toutes les correspondances trouvées sur la ligne et pas seulement à la première correspondance :

$ sed 's/is/\U&/g' example.txt
hello
world
C'EST la ligne trois.
Voici la dernière ligne.

D'autres indicateurs importants incluent un nombre pour indiquer quelle occurrence d'un modèle correspondant affecter :

$ sed 's/is/\U&/2' example.txt
bonjour
monde
C'EST la troisième ligne.
Voici la dernière ligne.

Le w flag, suivi d'un nom de fichier, écrit une ligne correspondante dans un fichier uniquement si une modification est apportée :

$ sed 's/is/\U&/w sed.log' example.txt
hello
world
Voici la ligne trois.
Voici la dernière ligne.
$ cat sed.log
Voici la ligne trois.
Voici la dernière ligne.

Les drapeaux peuvent être combinés :

$ sed 's/is/\U&/2w sed.log' example.txt
bonjour
monde
C'est la troisième ligne.
Voici la dernière ligne.
$ cat sed.log
C'EST la ligne trois.

Scripts

Il existe de nombreux sites intéressants avec sed « one-liners ». Ils vous donnent un sed orienté tâche commandes pour résoudre des problèmes courants. Cependant, apprendre sed pour vous-même vous permet d'écrire vos propres lignes, et celles-ci peuvent être adaptées à vos besoins spécifiques.

Scripts pour sed peuvent être écrits sous forme de lignes dans un terminal, ou ils peuvent être enregistrés dans un fichier et exécutés avec sed lui-même. J'ai tendance à écrire de petits scripts en une seule commande car je me retrouve rarement à réutiliser sed commandes dans la vraie vie. Quand j'écris un sed script, il est généralement très spécifique à un fichier. Par exemple, après avoir écrit le brouillon initial de cet article, j'ai utilisé sed normaliser la capitalisation de "sed", et c'est une tâche que je n'aurai probablement plus jamais à refaire.

Vous pouvez émettre une série de commandes distinctes pour sed séparés par un point virgule (; ).

$ sed ‘3t; s/line/\U&/’ example.txt
bonjour
monde
Ceci est la LIGNE trois.
Ceci est la dernière ligne.

Changements de portée avec des accolades

Vous pouvez également limiter les résultats affectés par des accolades ({} ). Lorsque vous joignez sed commandes entre accolades, elles ne s'appliquent qu'à une sélection spécifique. Par exemple, le mot "ligne" apparaît sur deux lignes de l'exemple de texte. Vous pouvez forcer sed pour n'affecter que la dernière ligne en déclarant la condition de correspondance requise ($ pour indiquer la dernière ligne) et en plaçant les s commande que vous souhaitez exécuter entre accolades immédiatement après :

$ sed '$ {s/line/\U&/}' example.txt
hello
world
Ceci est la troisième ligne.
Ceci est la dernière LIGNE.

Apprenez Sed

Vous pouvez faire beaucoup plus avec sed que ce qui est expliqué dans cet article. Je n'ai même pas eu l'occasion de créer des branches (b ), essais (t ), la maintien espace (H ), et de nombreuses autres fonctionnalités. J'aime ed , sed n'est probablement pas l'éditeur de texte que vous allez utiliser pour la création de documents ou même pour chaque tâche scriptée que vous devez effectuer, mais c'est une option puissante dont vous disposez en tant qu'utilisateur POSIX. Apprendre à sed les commandes sont structurées et la façon d'écrire des scripts courts peut apporter des modifications rapides à d'énormes quantités de texte. Lisez les info pages de GNU sed , ou les pages man de BSD sed , et découvrez ce que sed peut faire pour vous.


Linux
  1. 6 métacaractères Linux que j'aime utiliser en ligne de commande

  2. Comment utiliser heredoc comme éditeur de texte

  3. Manipulation de texte en ligne de commande avec sed

  4. Comment insérer du texte avant la première ligne d'un fichier ?

  5. Ajouter le texte correspondant à la ligne ?

Comment utiliser la fonction de vérification orthographique dans l'éditeur de texte Vim

Manipuler du texte en ligne de commande avec grep

Micro - Un éditeur de texte basé sur la ligne de commande pour Linux

COMMENT UTILISER L'EDITEUR SED

Comment installer la dernière version de l'éditeur de texte nano

Comment supprimer le texte sélectionné dans l'éditeur vi