Commandes Linux et compétences Shell
sed : édition de flux sans ouvrir d'éditeur
sed édite latéralement : des flux entiers de texte le traversent, en ressortent transformés et aucun éditeur ne s'ouvre. Sa réputation vient de -i, qui transforme une substitution d'une ligne en une opération par lots sur des milliers de fichiers, et des histoires de catastrophe d'administrateurs qui l'ont exécuté sans suffixe de sauvegarde. Le flux de travail sécurisé ne change jamais : exécutez la substitution visible, confirmez la sortie, puis ajoutez -i avec un suffixe et conservez le code de sortie.
Points clés
- Aperçu avant de vous engager : le fichier sed -n '10,20p' affiche une plage de lignes, et la même combinaison -n plus p imprime uniquement les lignes qui correspondent à une expression régulière ou à une adresse.
- Remplacez par des indicateurs qui font ce que vous voulez dire : s/old/new/g pour toutes les correspondances, un nombre comme 2g pour la seconde seulement et -E pour une expression régulière étendue sans page d'échappement de barre oblique inverse.
- Les modifications sur place reçoivent un suffixe, sans exception : l'application sed -i.bak 's/http:/https:/g' conserve une sauvegarde du même nom à côté de chaque modification ; ce suffixe a sauvé plus de déploiements que l'historique d'annulation de n'importe quel éditeur.
- Les délimiteurs sont gratuits : s|/var/www|/srv/app|g (ou s#...#g) évite les combats avec évasion de barre oblique lorsque votre modèle est plein de chemins.
- -i n'est pas atomique : un crash ou une mauvaise regex au milieu d'un lot a laissé des fichiers à moitié réécrits, de sorte que les travaux en masse s'exécutent sur des copies ou des arborescences suivies par git, jamais la seule copie.
- GNU et BSD sed ne sont pas d'accord sur -i : BSD nécessite le suffixe avant le script (sed -i '' fonctionne sur macOS, n'est pas une syntaxe Linux), ce qui est une raison de plus pour laquelle les scripts de portabilité évitent -i entièrement.
- Supprimer et isoler sont des verbes honnêtes : 'd' supprime les lignes correspondantes (sed '/^#/d' supprime les commentaires), et -n avec une plage isole une section ; les deux lisent mieux que des substitutions intelligentes.
- Tout ce qui précède les modifications sur une seule ligne, les blocs multilignes littéraux ou les jointures avec état appartient à awk ou à un vrai script ; forcer sed à faire du travail de programmeur est la raison pour laquelle naissent les one-liners illisibles.
Note de terrain
Mon premier sed -i sans suffixe .bak a atteint une configuration nginx de production juste avant le pic de trafic de l'après-midi. Depuis lors, chaque modification sur place porte un suffixe de sauvegarde, et j'ai lu la sortie d'essai avant même que le -i s'approche de la commande.
Questions fréquentes
Comment modifier uniquement les lignes qui correspondent à autre chose ?
Résolvez-les : sed '/cache/s/true/false/' retourne vrai à faux uniquement sur les lignes de cache, et des plages comme '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' modifient la portée des blocs ; l'adresse va en premier, la commande en second.
Pourquoi sed ne correspond-il pas aux fins de lignes dans un fichier édité sous Windows ?
Ces lignes se terminent par des caractères de retour chariot que les ancres '$' n'attendent pas ; supprimez-les d'abord avec tr ou normalisez-les à l'arrivée, et le contenu multiligne appartient toujours à awk ou Perl avec -0777.
sed est-il plus rapide que awk pour des remplacements simples ?
Marginalement et sans pertinence ; les deux se terminent en millisecondes sur des fichiers de taille configuration. Choisissez par la lisibilité, car un collègue doit démanteler votre one-liner en six mois.
Puis-je insérer des blocs de configuration entiers avec sed ?
Oui : 'a' s'ajoute après, 'i' s'insère avant et 'c' remplace la ligne, mais gardez le texte inséré simple et à usage unique ; les vrais blocs appartiennent à un fichier modèle ou à une étape de provisionnement appropriée.
Comment Kinetikatech vous aide avec commandes linux et compétences shell
Soyons honnêtes, la plupart des équipes viennent nous voir après avoir essayé d'abord par elles-mêmes : Les commandes et habitudes de script qui décident si un administrateur exploite un serveur ou le combat : rechercher, transformer, transférer et superviser le texte et les processus avec les outils présents dans chaque installation de base. Notre service Sécurité des serveurs Linux et Gestion de serveurs existe pour que vous n'ayez pas à apprendre commandes linux et compétences shell à vos dépens : nous gérons l'installation, la supervision et les surprises de 3 h du matin.