Comment Utiliser la Commande sed de Linux avec des Exemples Utiles
La commande sed de Linux vous permet de trouver, remplacer, insérer et supprimer des lignes dans un fichier sans l’ouvrir à l’aide d’un éditeur de texte. Adaptée aux entrées par pipeline et à divers formats de fichiers, cette commande Linux utilise également des expressions régulières ou regex, ce qui vous permet de rechercher et de manipuler des motifs complexes.
Avec ses différents cas d’utilisation, comprendre comment utiliser sed peut aider les administrateurs système à gérer efficacement leurs serveurs privés virtuels (VPS).
Cet article explique la syntaxe générale, les options et les sous-commandes de la commande sed de Linux. Vous apprendrez également divers exemples de sed et des cas d’utilisation pour la gestion des SDV Linux.
Sommaire
Syntaxe et options de la commande sed
Voici la syntaxe générale de la commande sed :
sed options 'script' nom_de_fichier
Pour modifier le comportement des commandes sed, ajoutez les options de ligne de commande suivantes :
- –help – affiche des informations sur l’utilisation de la commande.
- –debug – permet au terminal d’annoter l’exécution et l’entrée du programme.
- -i – écrase le fichier original.
- -n – désactive l’impression automatique sauf si l’utilisateur utilise la commande p.
- -u – minimise la production.
- –posix – désactive les extensions POSIX sed pour simplifier l’écriture de scripts portables.
- -e – spécifie plusieurs commandes à exécuter séquentiellement.
- -b – ouvre les fichiers d’entrée en mode binaire.
- -l – définit la longueur de ligne souhaitée pour la commande l.
Le script contient la sous-commande, le motif de recherche, la chaîne de remplacement et l’indicateur. Ces éléments sont encapsulés dans des apostrophes et séparés par un délimiteur, tel qu’une barre oblique (/), une barre oblique inverse (\) ou un tuyau (|).
Leur ordre peut varier en fonction de la sous-commande. Par exemple, la commande s ou substitute remplace une expression régulière par une autre chaîne. Voici la syntaxe :
's/regex_pattern/new_pattern/flags'
Pour modifier la substitution de motifs, utilisez les flags suivants :
- g – applique un remplacement global, et pas seulement à la première occurrence.
- Number – spécifie les numéros de ligne à modifier.
- p – imprime la nouvelle ligne après un remplacement de motif réussi.
- i – rend la substitution sensible à la casse.
Conseil de pro
La sous-commande s prend en charge plusieurs flags. Par exemple, ajoutez le flag gi pour activer une substitution globale sensible à la casse
Comment installer la commande sed
Le paquetage de l’éditeur de flux Linux est préinstallé dans la plupart des distributions. Si votre système ne dispose pas de cet outil, suivez les étapes suivantes pour l’installer :
Important ! Dans ce tutoriel, notre VPS est sous Ubuntu 22.04. Si vous utilisez une autre distribution ou version, les commandes peuvent être différentes.
- Connectez-vous à votre VPS à l’aide d’un client SSH comme PuTTY ou Terminal. Les utilisateurs de Hostinger peuvent utiliser le terminal de navigateur via hPanel.
- Saisissez vos identifiants de connexion root. Sur hPanel, ils se trouvent dans l’onglet Accès SSH du menu VPS Aperçu.
- Mettez à jour le référentiel en tapant cette commande :
sudo apt-get update
- Installez le sed package en entrant la commande suivante :
sudo apt-get install sed
- Exécutez la commande ci-dessous pour vérifier si l’installation a réussi :
sed --version
Exemples de commandes sed
Dans les sections suivantes, nous présenterons 10 exemples de commandes de l’éditeur de flux pour vous aider à comprendre ses fonctions.
Important ! Toutes les commandes ci-dessous ne modifient pas le fichier original. Pour appliquer directement les modifications, ajoutez l’option -i.
Rechercher et remplacer une chaîne de caractères
La commande sed est couramment utilisée pour remplacer du texte. Cet outil recherche le motif spécifié dans un fichier et le remplace par la chaîne souhaitée.
Pour ce faire, utilisez la commande s avec la chaîne que vous souhaitez remplacer et son remplaçant. Voici la syntaxe :
sed 's/old_string/new_string/' samplefile.txt
Remplacez les caractères de remplacement par la valeur réelle. Par exemple, cette commande remplace le mot “images” par “photos” dans le fichier scenery.txt :
sed 's/images/photos/' scenery.txt
Si votre chaîne contient le symbole de la barre oblique, utilisez un autre délimiteur, comme une barre oblique inverse (\) ou un tuyau (|).
Remplacer la nième occurrence d’un motif dans une ligne
Si un motif apparaît plusieurs fois dans une ligne, entrez la syntaxe de la commande suivante pour remplacer un motif spécifique :
sed 's/old_string/new_string/#' samplefile.txt
Remplacez le symbole du dièse (#) par le numéro de séquence du motif. Par exemple, cette commande remplace la première occurrence du mot “music” par “song” dans une ligne du fichier playlist.txt :
sed 's/music/song/1' playlist.txt
Remplacer toutes les occurrences du motif dans une ligne
Par défaut, la commande sed ne remplace que la première occurrence de la chaîne spécifiée et passe à la ligne d’entrée suivante. Pour remplacer tous les motifs correspondants sur la même ligne, ajoutez le flag g. Voici à quoi ressemble le script sed :
sed 's/old_string/new_string/g' samplefile.txt
Par exemple, exécutez la commande suivante pour remplacer toutes les occurrences contenant “eagle” par “falcon” dans une ligne du fichier animals.txt :
sed 's/eagle/falcon/g' animals.txt
Remplacer une occurrence à partir de la nième par toutes les occurrences d’une ligne
Au lieu de remplacer tous les motifs à l’intérieur d’une même ligne, combinez le nombre et le flag g pour remplacer les occurrences à partir d’une ligne spécifique. Voici le script sed :
sed 's/old_string/new_string/#g' samplefile.txt
Par exemple, la commande ci-dessous remplace le mot “pisces” par “aquarius” de la deuxième à la dernière occurrence dans le fichier astrology.txt.
sed 's/pisces/aquarius/2g' astrology.txt
Mettre entre parenthèses le premier caractère de chaque mot
Pour imprimer le premier caractère de chaque mot entre parenthèses, utilisez le script suivant :
echo "desired_sentence" | sed -E 's/(\b\w)/(\1)/g'
Par exemple, pour afficher le premier caractère de “An example of the sed command” entre parenthèses, entrez :
echo "An example of the sed command" | sed -E 's/(\b\w)/(\1)/g'
Pour mettre entre parenthèses le premier caractère de chaque mot d’un fichier, omettez la commande echo et ajoutez le document d’entrée à la fin.
Remplacer la chaîne de caractères sur un numéro de ligne spécifique
Pour remplacer la chaîne sur une nième ligne, ajoutez son numéro de séquence avant s comme suit :
sed '#s/old_string/new_string/' samplefile.txt
Par exemple, entrez ce qui suit pour remplacer le mot “cake” par “bread” à la deuxième ligne du fichier foods.txt :
sed '2s/gâteau/pain/' foods.txt
Dupliquer la ligne remplacée avec l’indicateur /p
Pour imprimer les lignes que votre commande sed a modifiées en tant que sortie supplémentaire, utilisez l’option p ou print. Voici la syntaxe générale :
sed 's/old_string/new_string/p' samplefile.txt
Par exemple, exécutez la commande suivante pour remplacer “phones” par “tablets” dans le fichier gadgets.txt et imprimez les résultats :
sed 's/phones/tablets/p' gadgets.txt
Le terminal affichera la chaîne originale si la ligne ne contient pas le motif de recherche et n’est pas substituée.
Remplacer la chaîne d’une série de lignes
La commande sed permet de modifier uniquement les numéros de ligne spécifiés dans le script en ajoutant la plage. Voici la syntaxe :
sed '#,# s/old_string/new_string/' samplefile.txt
Par exemple, la commande ci-dessous remplace “germany” situé à la troisième, quatrième et cinquième ligne du fichier countries.txt par “france” :
sed '3,5 s/allemagne/france/' countries.txt
Imprimer uniquement les lignes remplacées
Par défaut, l’éditeur de flux affiche l’intégralité du contenu du fichier. Pour simplifier la sortie, combinez l’option -n avec la commande p pour n’afficher que les lignes correspondantes. Voici la syntaxe générale :
sed -n 's/old_string/new_string/p' samplefile.txt
Par exemple, pour remplacer la troisième occurrence de “green” par “blue” dans une ligne du fichier colors.txt et imprimer les lignes modifiées dans la fenêtre du terminal, entrez :
sed -n 's/green/blue/3p' colors.txt
Supprimer des lignes d’un fichier particulier
La commande d ou delete vous permet de supprimer des lignes d’un fichier sans éditeur de texte. Par exemple, utilisez la syntaxe suivante pour supprimer un numéro de ligne particulier :
sed '#d' samplefile.txt
Remplacez le symbole du dièse (#) par le numéro de la ligne à supprimer. Par exemple, exécutez cette commande pour supprimer la première ligne du fichier cities.txt :
sed '1d' cities.txt
En outre, vous pouvez supprimer toutes les lignes d’une plage spécifique à l’aide de la commande sed :
sed '#,#d' samplefile.txt
Remplacez les symboles dièse (#) par les numéros de ligne de début et de fin. Par exemple, entrez ce qui suit pour supprimer la première à la troisième ligne du fichier cars.txt :
sed '1,3d' cars.txt
Vous pouvez également supprimer la dernière ligne d’un fichier en combinant la sous-commande d et le signe dollar ($), comme suit.
sed '$d' samplefile.txt
Pour supprimer un numéro de ligne spécifique en commençant par le dernier, utilisez la syntaxe suivante :
sed '#,$d' samplefile.txt
Par exemple, cette commande supprimera l’avant-dernière ligne du fichier books.txt :
sed '2,$d' books.txt
Outre la suppression de lignes, cette commande permet de supprimer une occurrence particulière dans un fichier. Pour ce faire, spécifiez le motif regex dans votre script, comme dans la syntaxe suivante :
sed '/pattern/d' samplefile.txt
Par exemple, exécutez cette commande pour supprimer le motif “oabo” du fichier filestrings.txt :
sed '/oabo/d' filestrings.txt
Cas d’utilisation de la commande sed
Dans cette section, nous expliquerons comment utiliser les commandes sed pour différents cas d’ utilisation dans la gestion des serveurs.
Traitement des fichiers par lots
En règle générale, il existe deux façons d’éditer des fichiers en masse à l’aide de la commande sed.
Tout d’abord, spécifiez les fichiers individuellement. Avec cette méthode, vous listerez tous les fichiers d’entrée que vous souhaitez remplacer à la fin de votre commande, en les séparant par des espaces. Voici la syntaxe :
sed 's/old_string/new_string/g' filename1.txt filename2.txt
La commande recherchera et remplacera simultanément toutes les occurrences de old_string dans les deux fichiers texte.
Deuxièmement, vous pouvez les analyser à l’aide de la commande find. Cette méthode permet de rechercher automatiquement dans un répertoire les fichiers contenant le motif spécifié. Voici la syntaxe :
find /directory/path/file -type f -exec sed -i 's/old_string/new_string/g' {} \ ;
Remplacez /directory/path/file par le répertoire contenant les fichiers à traiter.
Si vous utilisez la deuxième méthode, créez un fichier de sauvegarde pour faciliter la restauration en cas de substitutions accidentelles. Vous pouvez également omettre l’option -i pour désactiver l’édition sur place et conserver le fichier d’origine intact.
Analyse des fichiers journaux
Outre la modification des motifs, la commande sed de Linux est également utile pour l’analyse des journaux. Elle vous permet de rechercher facilement un motif spécifique dans le fichier journal et d’extraire les résultats pour faciliter les diagnostics.
Pour ce faire, ajoutez le symbole > afin d’afficher les motifs correspondants dans un fichier texte. Bien que la commande diffère selon l’usage que vous en faites, la syntaxe de base reste la suivante :
sed -n 's/pattern/p' logfile.log > extracted_data.txt
Modifiez le motif de l’expression rationnelle en fonction des données que vous souhaitez rechercher, comme l’adresse IP, le message d’erreur ou l’horodatage. Par exemple, utilisez ce script pour exporter les erreurs enregistrées :
sed -n 's/Erreur : \(.*\)/\1/p' logfile.log > error_logs.txt
Manipulation des balises HTML/XML
La commande sed de Linux vous permet de remplacer facilement des chaînes de caractères dans le code. Par exemple, vous pouvez rechercher des balises HTML ou XML spécifiques et remplacer leurs attributs à l’aide de la commande de substitution. Voici la syntaxe :
sed 's/<tag attribute="old_pattern">/<tag attribute="new_pattern"/' file.html
La commande varie en fonction des balises et des attributs que vous souhaitez modifier. Par exemple, cette commande sed change les attributs de couleur de toutes les balises d’en-tête en noir :
sed 's/\(<h[1-6].*color:\) [^ ;]*/\1 black/g' webpage.html
La commande recherche le modèle de code HTML suivant et remplace la valeur de la couleur par la nouvelle chaîne :
<h1 style="color : value ;">Tête 1</h1>
Utiliser des fichiers externes
Les opérations complexes de la commande sed peuvent contenir plusieurs scripts. Bien qu’il soit possible de les ajouter dans une seule commande à l’aide de l’option -e, celle-ci est difficile à écrire et sujette aux erreurs.
Vous pouvez également créer un fichier SED externe contenant plusieurs scripts. Voici la marche à suivre :
- Exécutez la commande nano pour créer un nouveau fichier script et ouvrez l’éditeur de texte. Remplacez script par le nom de fichier que vous souhaitez :
nano script.sed
- Rédigez vos scripts et veillez à ce que chaque ligne contienne un script sans apostrophes, comme dans le cas suivant :
s/ancien_motif1/nouveau_motif1/g
/old_pattern2/d
- Appuyez sur Ctrl+X et Y pour fermer l’éditeur et enregistrer le fichier.
- Exécutez les scripts en ajoutant le fichier à l’aide de l’option -f dans votre commande. Voici à quoi ressemble la syntaxe :
sed -f script.sed fichier_destination.txt
Références arrière dans les expressions rationnelles
Les références arrière (Backreferences) vous permettent de vous référer à des motifs ayant déjà fait l’objet d’une correspondance et de les réutiliser dans la nouvelle chaîne. Il n’est donc pas nécessaire de réécrire le motif de la regex, ce qui simplifie le script.
Le motif utilisé comme référence de la commande sed est appelé groupe de capture. Encapsulé dans des parenthèses, il comprend également des barres obliques pour les expressions régulières étendues.
Pour faire référence au groupe de capture, utilisez une barre oblique inverse (\) et un nombre indiquant l’ordre des motifs. Par exemple, la référence arrière \1 réutilisera le premier motif de regex capturé.
Les références arrière sont utiles pour remplacer et réorganiser les motifs. Par exemple, cette commande sed les utilise pour réorganiser les noms et les prénoms :
echo "Doe, John" | sed 's/\N(.*\N), \N(.*\N)/\N2 \N/'
Les deux modèles de regex \(.*\) capturent Doe et John, en les définissant comme référence. Étant donné que la nouvelle chaîne commence par la deuxième référence arrière, la nouvelle valeur sera John Doe.
Conclusion
L’éditeur de flux ou la commande sed sous Linux est un outil qui permet de trouver et de modifier un motif dans un fichier à l’aide d’expressions régulières. Sa syntaxe comprend la commande sed, les options, le script et le fichier cible.
Les options de la ligne de commande sed modifient le comportement de l’outil, tandis que le script détermine la manière dont l’outil modifie le motif regex correspondant. Le script contient une sous-commande, des flags et les motifs de l’expression rationnelle, chacun étant séparé par un délimiteur tel qu’une barre oblique (/).
Pour utiliser la commande sed sous Linux, ouvrez des applications de ligne de commande telles que Terminal, un client SSH ou le Browser Terminal d’Hostinger. Pour trouver et remplacer un motif, utilisez la sous-commande s. La sous-commande d permet quant à elle de supprimer des lignes ou des chaînes de caractères.
La commande sed de Linux est également utile pour l’analyse des journaux, la modification des balises et le traitement des fichiers en masse. En outre, elle prend en charge les références inverses (regex) et vous permet d’utiliser un fichier script pour exécuter plusieurs commandes Linux simultanément.
Commande sed de Linux – FAQ
Cette section répond aux questions les plus fréquemment posées sur la commande sed.
En quoi sed est-il différent de grep ?
Sed et grep sont tous deux des outils de traitement de texte sous Linux. Cependant, grep ne prend pas en charge les commandes de transformation de texte ou de manipulation de ligne comme la substitution. Il est principalement utilisé pour trouver des motifs de texte particuliers dans des fichiers volumineux et pour imprimer la sortie.
Comment sed est-il utilisé dans le script Bash ?
Dans le script Bash, la commande sed a trois utilisations principales : l’impression vers stdout, la suppression d’un texte et le remplacement d’une chaîne de caractères spécifique. Le programme détermine la ligne qu’il va traiter à partir de la plage d’adresses spécifiée.
Comment appeler une variable dans la commande sed ?
Une variable est un caractère auquel nous attribuons une valeur, ce qui permet une meilleure lisibilité lorsqu’il est ajouté à une commande sed. Il peut s’agir d’un nombre, d’un caractère, d’un nom de fichier ou d’un périphérique. L’interpréteur de commandes développe les variables. Par exemple, si la chaîne contient une barre oblique (/), utilisez un autre délimiteur, tel qu’un tuyau (|).
En quoi la commande sed est-elle différente de la commande awk ?
La commande sed permet d’effectuer des modifications de texte de base, telles que le remplacement, la suppression et l’insertion d’un motif dans un fichier d’entrée. La commande awk, quant à elle, est utilisée pour des tâches complexes telles que l’extraction de données, la manipulation de texte et les calculs mathématiques. Elle prend également en charge des instructions de programmation telles que if/else et do/while.