Renforcez vos compétences en ligne de commande avec ces exemples sed

Avez-vous cherché une autre façon d’effectuer des opérations d’édition sur des textes ? Ne cherchez plus ! Ce tutoriel vous couvre avec des exemples d’éditeur de flux sed.

En bref, sed vous permet d’effectuer une large gamme de modifications sur des fichiers et des flux de texte de manière non interactive. Vous prenez les décisions d’édition au fur et à mesure que vous appelez les commandes. Et dans ce tutoriel, vous apprendrez comment utiliser les commandes sed et rationaliser efficacement votre flux de travail.

Lisez la suite et renforcez vos compétences en ligne de commande !

Prérequis

Assurez-vous d’avoir ce qui suit pour suivre la démonstration pratique de ce tutoriel :

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

Installation de sed sur Ubuntu

sed est généralement inclus en tant qu’utilitaire standard dans la plupart des systèmes d’exploitation de type Unix, y compris Linux et macOS. Mais quoi qu’il en soit, vérifier si vous avez déjà sed sur votre système serait correct et est une procédure de base avant d’effectuer des transformations de texte.

1. Ouvrez votre terminal et exécutez la commande sed ci-dessous pour vérifier quelle version de sed est installée sur votre système.

sed --version

Si sed est installé, vous verrez le numéro de version de sed et des informations sur la construction, comme indiqué ci-dessous.

Verifying sed’s installed version

Sinon, vous verrez le message d’erreur ci-dessous si sed n’est pas installé.

Ce message d’erreur indique que la commande sed n’a pas été trouvée dans la variable d’environnement PATH de votre système.

Getting an error running sed commands

2. Ensuite, exécutez la commande [apt-get update ci-dessous pour mettre à jour et installer sed sur votre système.

Cette commande récupère les dernières informations sur les paquets à partir des sources de paquets configurées, y compris les dépendances, les fichiers et les scripts du paquet. Exécuter cette commande est nécessaire pour vous assurer d’installer la dernière version de sed et de tout autre paquet dont vous pourriez avoir besoin.

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

3. Enfin, exécutez la commande suivante pour vérifier que la commande sed est installée sur votre système.

Cette commande affiche le chemin complet vers l’exécutable sed, qui dans cet exemple est /usr/bin/sed.

Une fois que vous avez installé sed et vérifié qu’il est dans votre PATH, vous pouvez utiliser la commande sed pour effectuer diverses transformations et manipulations de texte.

which sed
Verifying that the sed command is installed

Remplacement de chaînes dans un fichier texte

sed est un éditeur de flux populaire disponible sur la plupart des systèmes d’exploitation de type Unix, et l’une des fonctionnalités les plus pratiques de sed est le remplacement de chaînes dans un fichier texte.

Voici quelques scénarios, mais non limités à, où le remplacement de chaînes est utile:

  • Mise à jour d’une liste d’URL pour refléter un nouveau nom de domaine.
  • Changement des IDs de produit dans une base de données ou un fichier CSV.
  • Formatage des données pour les importer dans un autre système et bien plus encore.

La syntaxe de base pour utiliser sed est la suivante où :

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

Supposons que vous ayez un fichier texte appelé urls.txt qui contient une liste d’URL et que vous souhaitiez mettre à jour toutes les URL pour utiliser un nouveau nom de domaine.

1. Exécutez les commandes echo ci-dessous pour créer le fichier urls.txt dans le répertoire actuel. Ces commandes ne fournissent pas de sortie, mais écrivent des textes spécifiés dans le fichier.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. Ensuite, exécutez la commande cat pour afficher le contenu du fichier urls.txt. cat urls.txt

cat urls.txt

La sortie ci-dessous confirme les trois anciennes URL écrites dans le fichier urls.txt.

Viewing the contents of the urls.txt file

3. Maintenant, exécutez la commande ci-dessous pour rechercher et substituer (s) toutes les occurrences de la chaîne old-domain.com par new-domain.com dans le fichier urls.txt.

sed 's/old-domain.com/new-domain.com/' urls.txt

Vous verrez que les URL dans votre fichier d’entrée ont été mises à jour avec le nouveau domaine, comme indiqué.

Replacing a string in a text file

Remplacement de la Nième occurrence d’une chaîne

En plus de la fonctionnalité de base de recherche et remplacement, sed dispose de commandes intégrées supplémentaires qui vous permettent d’effectuer des transformations de texte plus complexes. Un tel cas est le remplacement de la Nième occurrence de la chaîne de motif dans une seule ligne de texte.

Par exemple, si vous souhaitez mettre à jour le deuxième champ dans un fichier CSV avec une nouvelle valeur ou mettre à jour la troisième occurrence d’une chaîne dans une sauvegarde de base de données.

La syntaxe de base de cette commande est la suivante où:

  • motif – est la chaîne à remplacer.
  • remplacement – est la chaîne à utiliser comme remplacement.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

Pour voir comment remplacer la n-ième occurrence d’une chaîne, suivez ces étapes:

Exécutez la commande echo suivante pour créer une ligne de texte avec trois occurrences du motif rapide. La commande sed remplace ensuite (s) la deuxième occurrence (2) du motif rapide par la chaîne rapide.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

Comme vous pouvez le voir ci-dessous, seule la deuxième occurrence du motif rapide a été remplacée par la chaîne rapide, tandis que toutes les autres occurrences restent inchangées.

La commande nth est sensible à la casse par défaut. Par conséquent, la commande ne recherche que la correspondance exacte du motif. Pour ignorer la casse des lettres du motif, passez à l’étape suivante.

Replacing the nth occurrence of a string

? Notez que la commande nth compte les occurrences du motif de gauche à droite. De plus, la commande nth ne fonctionne que sur une seule ligne de texte. Pour effectuer une substitution sur plusieurs lignes, utilisez une méthode différente démontrée dans la section suivante.

Ensuite, exécutez la commande ci-dessous pour remplacer la deuxième (2) occurrence du motif rapide par rapide tout en ignorant (i) la casse des lettres.

L’option i est pratique lorsqu’on travaille avec du texte avec une capitalisation inconsistante.

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

Ci-dessous, la deuxième occurrence du mot rapide (QuiCk) est remplacée avec succès par la chaîne rapide — indépendamment de la casse des lettres.

Replacing the nth occurrence of a string while ignoring the letter case

Remplacement de toutes les occurrences d’un motif/chaîne correspondant

Au lieu de remplacer la n-ième occurrence d’une chaîne, peut-être envisagez-vous de remplacer toutes ses occurrences. Faire cela aide considérablement avec votre plan de mettre à jour en masse chaque occurrence d’une chaîne de droit d’auteur avec l’année en cours, par exemple.

1. Créez un fichier appelé input.txt avec le contenu suivant dans votre éditeur de texte préféré.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. Ensuite, exécutez la commande suivante pour remplacer (s) toutes les occurrences du mot quick par fast du fichier input.txt. Une fois remplacées, les modifications sont écrites dans le fichier output.txt.

sed 's/quick/fast/g' input.txt > output.txt

3. Maintenant, exécutez la commande ci-dessous pour afficher le contenu du fichier output.txt et vérifier si le remplacement a été effectué.

cat output.txt

Vous verrez que toutes les occurrences du mot quick ont été remplacées par fast, comme indiqué ci-dessous. Tout comme la commande nth, la commande g est sensible à la casse et ne remplace que les correspondances exactes.

La chaîne Quick ne sera pas remplacée, comme indiqué ci-dessous, mais vous pouvez utiliser l’option i pour effectuer des substitutions insensibles à la casse.

Replacing All the Occurrences of a Matching Pattern/String

Remplacement d’une chaîne de motif correspondant sur une ligne spécifique

Peut-être savez-vous déjà sur quelle ligne de la chaîne vous voulez remplacer se trouve. Pourquoi remplacer toutes les occurrences si vous pouvez remplacer les chaînes sur des lignes spécifiques ? Cette fonctionnalité est utile lorsque vous apportez des modifications à une ligne particulière dans un fichier ou un flux tout en laissant les autres lignes intactes.

Voici la syntaxe pour remplacer une chaîne à partir d’une ligne spécifique, où n représente le numéro de ligne.

sed 'n s/pattern/replacement/' input_file output_file

1. Créez un fichier appelé myfile.txt avec le contenu suivant.

test1
test2
test3

2. Ensuite, exécutez la commande sed ci-dessous pour effectuer ce qui suit :

  • Recherchez le mot test2 à partir de la deuxième ligne (2) du fichier myfile.txt. Remplacez (s) le mot test2 par test2_changed. Écrivez les modifications (>) dans un nouveau fichier appelé myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. Enfin, exécutez la commande cat ci-dessous pour voir le contenu du fichier myfile_changed.txt.

cat myfile_changed.txt

Comme vous pouvez le voir ci-dessous, la deuxième ligne du fichier myfile.txt a été remplacée par test2_changed, tandis que toutes les autres lignes restent inchangées.

Verifying the changed string on a specific line

Exclusivement Affichage des Lignes Modifiées

Au lieu d’imprimer l’intégralité du contenu d’un fichier après avoir apporté des modifications, vous pouvez vouloir imprimer exclusivement les lignes modifiées. Comment ? En utilisant le drapeau p avec l’option -n.

Voici la syntaxe pour imprimer exclusivement les lignes modifiées où :

  • L’option -n indique à sed de supprimer le comportement par défaut d’imprimer chaque ligne.
  • Le drapeau p indique à sed d’imprimer la sortie de la commande.
sed -n 's/pattern/replacement/p' input_file output_file

Ouvrez votre fichier myfile.txt et remplacez le contenu par ce qui suit. Remarquez que la deuxième ligne est incorrecte car le mot first devrait être remplacé par second.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

Maintenant, exécutez la commande sed ci-dessous pour remplacer la chaîne first par second à la deuxième ligne (2) de myfile.txt, mais affichez uniquement les lignes modifiées (p).

sed -n '2 s/first/second/p' myfile.txt

Vous verrez la sortie de la deuxième ligne modifiée uniquement sur votre terminal, comme indiqué ci-dessous.

Outputting changed lines exclusively

Conclusion

Dans ce tutoriel, vous avez utilisé différents exemples d’utilisation de sed pour effectuer des opérations de recherche et de remplacement. De plus, vous avez abordé des techniques plus avancées, telles que le remplacement d’occurrences spécifiques et la sortie uniquement des lignes modifiées.

sed est un puissant outil en ligne de commande qui vous permet d’effectuer diverses tâches de manipulation de texte. Que ce soit pour effectuer des remplacements globaux dans un fichier entier ou des remplacements ciblés sur des lignes spécifiques, sed fera l’affaire.

Maintenant, pourquoi ne pas en savoir plus sur les expressions régulières? Les expressions régulières sont essentielles pour de nombreux outils de manipulation de texte, y compris sed. Ces expressions vous font gagner du temps et réduisent les efforts déployés, surtout lors de la réalisation de recherches complexes et d’opérations de remplacement sur de grandes quantités de texte.

Source:
https://adamtheautomator.com/sed-examples/