Comment modifier du texte à l’aide d’expressions régulières avec l’éditeur de flux sed –
Chaque utilisateur d’ordinateur dans le monde modifiera tôt ou tard une chaîne de texte – manuellement ou automatiquement. Être présenté à la éditeur de flux sed, qui vous permet d’apporter des modifications de texte en masse aux chaînes et aux fichiers.
Expressions régulières sur la ligne de commande
L’éditeur de flux sed, un outil disponible par défaut sur de nombreuses distributions Linux, vous permet d’analyser et de transformer du texte de manière simple et directe, que ce texte se trouve dans des fichiers ou simplement des chaînes en ligne de commande. Vous pouvez également analyser les listes de répertoires, la sortie des listes de processus et la plupart des autres types d’informations pouvant entrer ou sortir de votre session de terminal.
Pour vérifier si sed est disponible sur votre distribution Linux, tapez sed --version
en ligne de commande:
Ne vous inquiétez pas si votre version est légèrement plus ancienne que celle illustrée ici. Cela ira presque certainement pour les exemples dont nous discutons ici. Si l’outil n’est pas disponible sur votre distribution, vous pouvez l’installer en utilisant sudo apt install sed
pour les systèmes d’exploitation basés sur Ubuntu / Debian, ou sudo yum install sed
pour les systèmes d’exploitation basés sur RedHat / RPM.
sed
applique une petite transformation de texte à l’aide de ce qu’on appelle un RegEx ou une expression régulière. Une expression régulière est une forme et une méthode permettant d’exprimer des opérations de recherche, de remplacement et de modification textuelles plus complexes dans un format toujours lisible par l’homme. Les expressions régulières sont compliquées et peuvent être difficiles à lire pour les débutants. Vous pouvez lire notre guide, Comment utilisez-vous réellement Regex, pour plus d’informations sur la façon de lire et d’écrire Regex.
Pour les besoins de cet article, nous nous en tiendrons aux expressions régulières faciles à comprendre et à lire. Par exemple, ce qui suit est un simple remplacement:
Comme vous pouvez le voir, nous avons fait écho à un petit morceau de texte et l’avons ensuite transformé à l’aide de l’outil sed. Nous avons utilisé la commande sed ‘s’ (substitute) et indiqué ce que nous voulions changer. Vous pouvez lire ceci d’une autre manière comme s|from|to|
où ‘|’ est le séparateur entre les sections / champs, ‘s’ est la commande et ‘from’ et ‘to’ sont les deux options passées à la commande ‘s’.
Nous avons ainsi transformé ‘Hello Cloud Savvy IT fans!’ à « Bonjour les fans de cloudsavvyit.com! » en ne modifiant qu’une partie du texte à l’aide de l’éditeur de flux sed. Prenons un exemple un peu plus complexe.
Ici, nous créons d’abord un fichier avec 3 lignes en utilisant le echo
commande avec redirection vers un fichier (‘>’ crée un nouveau fichier, écrasant un fichier du même nom s’il existe, et ‘>>’ ajoute à un fichier sans le modifier autrement). Ensuite, nous avons affiché le contenu du fichier en utilisant le cat
commander.
Nous avons ensuite transformé le contenu du fichier avec le sed
outil directement. Pour ce faire, nous avons spécifié l’option ‘-i’ pour sed qui édite le fichier sur place. L’instruction de transformation textuelle réelle est la même que précédemment. Et enfin nous spécifions le nom du fichier à la fin de la commande. Nous vérifions ensuite le contenu du fichier et remarquons comment notre entrée a changé.
Comme vous pouvez commencer à le voir, ou le savoir déjà par expérience passée, il y a beaucoup de puissance disponible dans l’outil sed.
Pimentons un peu les choses en développant notre expression régulière et notre méthode d’écriture de l’instruction de transformation de texte sed:
Dans cet exemple, nous avons remplacé la lettre ‘h’ par ‘H_’ et nous l’avons fait de manière globale (notez le qualificatif ‘g’ à la fin de la première instruction passée à sed) et insensible à la casse (notez le ‘i’ qualificatif également vers la fin de la première instruction). Le «h» correspond même si le fichier contient «H» en raison du qualificatif «i».
Nous avons ensuite commencé une nouvelle instruction (les instructions se terminent / se terminent par ‘;’ comme beaucoup d’autres langages de codage) dans laquelle nous avons supprimé ‘.com’ en le recherchant essentiellement et en le remplaçant par rien.
Notez également comment nous avons utilisé différents séparateurs d’options de champ / commande. Dans le premier exemple, nous avons utilisé ‘|’ qui est globalement un séparateur de champ facile à utiliser et assez rare. De nombreuses personnes utilisent «/», bien que cela puisse entraîner des problèmes lors de l’analyse des noms de chemin qui contiennent souvent «/».
Le fait de pouvoir utiliser différents séparateurs d’option de champ / commande vous permet d’utiliser facilement un autre séparateur si votre chaîne de texte contient réellement ou contiendra probablement un caractère spécifique.
Utilisation de sed avec des fichiers
Explorons un autre exemple basé sur sed où nous allons injecter du texte dans un fichier:
Dans cet exemple, nous avons créé un fichier avec 5 lignes et ensuite utilisé une instruction sed légèrement complexe pour injecter un séparateur «-» après chaque seconde ligne. Bien que la syntaxe s’explique en grande partie d’elle-même, il est intéressant de noter que la commande ‘r’ (lire / ajouter du texte à partir d’un fichier) spécifie le nom du fichier d’injection directement et tout en restant à l’intérieur de l’instruction principale, sans aucun séparateur.
Vous pouvez également commencer à voir qu’en plus d’apprendre une syntaxe d’expression régulière, il est avantageux d’apprendre la syntaxe sed en profondeur. C’est presque comme apprendre deux nouvelles langues étrangères, mais l’avantage est que la syntaxe sed peut évoluer avec votre besoin de complexité supplémentaire.
Explorons un exemple où nous remplaçons une zone de texte spécifique par autre chose:
Dans cet exemple, nous recherchons le texte «3», et pour cette ligne, nous remplacerons «C» par «Z». Vous voyez à quel point sed peut être polyvalent.
Enfin, nous pouvons examiner l’analyse d’autres types d’entrée:
Comme vous pouvez le voir, nous avons créé 3 fichiers et demandé une liste de répertoires en utilisant le ls
commander. Nous avons ensuite pris cette sortie comme entrée de sed (en utilisant la commande de canal Linux, ‘|’) et transformé une partie de notre liste de répertoires en un trait de soulignement.
L’éditeur de flux sed est un outil polyvalent qui peut vous aider à analyser et à transformer presque n’importe quel texte directement à partir de la ligne de commande du terminal, que l’entrée provienne d’un simple echo
instruction, d’autres outils Linux ou à partir d’un fichier texte plat. Prendre plaisir!