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'aimeed
,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 lesinfo
pages de GNUsed
, ou les pages man de BSDsed
, et découvrez ce quesed
peut faire pour vous.