Ajouter une valeur en fin de ligne avec sed: guide complet et exemples reproductibles

La commande sed est l'un des outils les plus puissants du terminal Linux pour manipuler du texte, mais aussi l'un des plus intimidants pour qui débute avec les expressions régulières. Dès que vous devez remplacer une chaîne dans un fichier de configuration, supprimer des lignes selon un motif ou appliquer une modification en masse à des centaines de fichiers, sed fait en une ligne ce qui prendrait des heures à la main. Dans ce guide, nous allons prendre en main sed progressivement, à partir d'exemples concrets et reproductibles. L'idée étant de vous montrer la puissance de sed au travers de plusieurs exemples : la suppression de lignes, la substitution de texte, le regroupement de commandes et l'utilisation de sed dans des scripts.

Qu'est-ce que sed et comment cela fonctionne

sed (pour Stream EDitor, soit « éditeur de flux ») est un utilitaire en ligne de commande qui lit un texte ligne par ligne, applique une série de transformations, puis renvoie le résultat. Ici, s est la commande de substitution, les / délimitent le motif recherché et son remplacement, g applique le changement à toutes les occurrences de la ligne, et l'option -i modifie directement le fichier (au lieu d'afficher le résultat à l'écran). sed traite un flux de texte (le contenu d'un fichier ou la sortie d'une autre commande) sans jamais l'ouvrir dans un éditeur interactif. Il applique un ou plusieurs « scripts » à chaque ligne, puis produit le texte transformé.

La partie 'commande' combine une adresse optionnelle (un numéro de ligne, une plage ou une expression régulière) et une action (substituer, supprimer, translittérer, etc.). -i : modifie le fichier sur place au lieu d'afficher le résultat sur la sortie standard. -E : active les expressions régulières étendues (ERE), plus lisibles pour les motifs complexes (parenthèses, +, ? Avec GNU sed (Linux), l'option -i peut s'utiliser seule ou avec un suffixe collé (-i.bak). Si un script fonctionne sous Linux mais échoue sur un Mac avec une erreur de type "sed: 1: "demo.txt": extra characters at the end of d command", c'est presque toujours cette différence qui est en cause. Par ailleurs, certaines fonctions comme la conversion de casse (\U, \L) sont des extensions propres à GNU sed et ne sont pas disponibles partout.

Pour suivre ce guide, vous avez besoin d'un accès à un terminal sur une machine Linux et de droits suffisants pour créer des fichiers dans votre répertoire de travail. sed est installé par défaut sur la quasi-totalité des distributions. La suppression de lignes s'appuie sur la commande d (pour delete). Plutôt que de raisonner par numéro, on peut cibler les lignes qui correspondent à un motif. /^#/ est une adresse sous forme d'expression régulière. Les / délimitent le motif, et à l'intérieur, ^ désigne le début de ligne et # le caractère recherché. Les expressions régulières sont un sujet à part entière et un vrai multiplicateur de puissance pour sed.

Cas d'usage fréquents et techniques essentielles

  1. Suppression et substitution simples

    Lire aussi: enjeux et étapes du redressement judiciaire

    • Pour supprimer la ligne 3 : sed -i '3d' fichier.txt.
    • Pour remplacer toutes les occurrences d'un mot : sed -i 's/mot/remplacement/g' fichier.txt.
    • Pour transformer tout le contenu d'une ligne en majuscules avec GNU sed : sed -i 's/.*/\U&/' fichier.txt.
  2. Gestion des délimiteurs et des motifs complexes

    • Notez que remplacer peut nécessiter d'utiliser des délimiteurs autres que / lorsque le motif contient des slashes; par exemple utiliser | comme délimiteur : sed -i 's|/etc|/etc/chemin|g' fichier.txt.
    • Les groupes capturés et les références: en entourant une partie du motif de parenthèses, on crée un groupe de capture et on peut réutiliser les références \1, \2 dans le remplacement.
  3. Expressions régulières et modes d'affichage

    • p affiche la ligne courante lorsque l'on travaille avec l'option -n (quiet mode) et que l'on veut imprimer seulement certaines lignes via la commande p.
    • Délimiter la zone à afficher avec deux motifs permet d’extraire un bloc dans un fichier de log ou de configuration.
  4. Extensions et portabilité

    • Les extensions GNU (\U, \L, -i sans argument) ne fonctionnent pas sur BSD ou macOS. Utilisez des méthodes compatibles si vous écrivez des scripts cross-platform.
    • Pour sauvegarder avant modification: sed -i.bak 's/ancien/nouveau/' fichier.txt.
  5. Ajouter, insérer ou changer des lignes entières

    • Trois options principales : a (append) pour ajouter après l'adresse visée, i (insert) pour ajouter avant, et c (change) pour remplacer entièrement la ligne.
  6. Translittération et remplacement de caractères

    Lire aussi: Modifier Activité Kbis Auto-Entrepreneur

    • y est la commande de translittération: elle traite les caractères un par un (et non comme une chaîne).
  7. Combinaison de commandes dans un script

    • On peut exécuter plusieurs commandes sed en une seule fois à l'aide des accolades { et }. Entre chaque instruction, un ; délimite la portée de chaque commande. Cela permet de chaîner plusieurs transformations sur un même fichier.
  8. Impacts pratiques en administration et sécurité

    • Par exemple, modifier une directive dans un fichier de configuration « brut » ou interagir avec la crontab d'un système via sed. Les crontabs des utilisateurs sont stockées côté système dans /var/spool/cron/crontabs. Cette approche est très pratique dans un script Bash, pour retirer une tâche planifiée précise sans toucher aux autres.

Bonnes pratiques et conseils avancés

  • Testez d'abord sans -i pour voir le résultat à l'écran, puis ajoutez -i lorsque le comportement est validé. Sauvegardez avec -i.bak.
  • Choisissez un autre délimiteur que / lorsque le motif contient des slashs (des chemins, par exemple).
  • Gardez la portabilité en tête: les extensions GNU ne sont pas universelles sur BSD/macOS; privilégiez des motifs compatibles ou des alternatives portables.
  • Dans un script, faites attention aux guillemets: Bash ne remplace les variables qu'à l'intérieur des guillemets doubles. Si vous insérez littéralement le texte $nouvelle_ip, vérifiez vos guillemets.

Exemples pratiques supplémentaires

Supposons que vous souhaitiez remplacer une adresse IP dans un fichier de configuration après la chaîne « allow from » : sed -i "s/allow from [0-9.]*/allow from 10.0.0.1/g" .htaccess.

Pour remplacer les tranches de texte qui contiennent des slashs dans le motif, utilisez un autre délimiteur, par exemple : sed -i 's|ancien/text|nouveau/text|g' fichier.txt.

Pour ajouter une ligne après une adresse ciblée, utilisez la commande a, et pour insérer avant, i : sed '/pattern/a nouvelle_ligne' fichier.txt et sed '/pattern/i nouvelle_ligne' fichier.txt.

Lire aussi: INPI et Micro-Entreprise : Démarches

Récapitulatif rapide

  • sed est une commande incontournable pour manipuler du texte en ligne de commande sous Linux.
  • Utilisez -i pour modifier le fichier en place, ou sans -i pour un aperçu à l'écran.
  • Les expressions régulières et les délimiteurs doivent être choisis avec soin pour éviter les échappements complexes.
  • Pour des opérations successives, combinez les commandes dans des scripts sed avec des blocs { ... } et des séparateurs ;.

balises:

Articles populaires: