Générateur de commandes sed
Construis une commande sed sans réapprendre la syntaxe, avec adressage de lignes et un flag in-place qui te prévient d'abord.
Ce générateur de commandes sed construit la ligne sed exacte dont tu as besoin sans te faire réapprendre la syntaxe pour la centième fois. Choisis une opération (substituer, supprimer des lignes, afficher une plage, insérer ou ajouter du texte) puis pointe les lignes qui t'intéressent : toutes les lignes, un numéro précis, une plage comme 10,20, ou un pattern regex. Active les flags global et ignorer la casse, et la commande se reconstruit en direct pendant que tu tapes, avec un tableau étiqueté qui explique chaque partie. Quand tu actives l'édition in-place, il te prévient, parce que le flag -i tout seul réécrit le fichier sans annulation et a déjà bousillé pas mal de fichiers. Il change même le délimiteur quand ton pattern contient un slash. Tout tourne dans ton navigateur, donc rien de ce que tu tapes ne quitte la page.
100% dans votre navigateur. Rien de ce que vous tapez ne quitte cette page.
générateur de commandes sed
Besoin d'une commande sed et pas envie de réapprendre la syntaxe pour la centième fois ? Choisis ce que tu veux faire. Substituer du texte, supprimer des lignes, afficher une plage, glisser une ligne quelque part. Tu règles le pattern et tu pointes les lignes qui t'intéressent. Ensuite tu décides s'il doit réécrire le fichier ou juste te montrer le résultat. La commande se reconstruit au fur et à mesure que tu tapes, et chaque morceau est expliqué. Active l'édition in-place et tu auras un avertissement, parce que ce flag a déjà bousillé pas mal de fichiers. Rien ne quitte ton navigateur.
Ce que fait ce générateur de commandes sed
Ce générateur de commandes sed construit la ligne exacte dont tu as besoin sans te faire réapprendre la syntaxe. sed, c'est le stream editor. Il lit le texte ligne par ligne pendant qu'il défile et le retouche au passage. Franchement, je ne connais pas plus rapide pour échanger des chaînes, virer des lignes dont tu ne veux pas, ou scripter une modif sur tout un fichier de config. Le hic, c'est le langage. Il est tellement concis qu'il en devient cryptique : une lettre pour la commande, une adresse optionnelle qui choisit les lignes, puis un flag ou deux. C'est précisément cette densité qui fait que sed est si souvent mal utilisé, et le flag -i (celui qui réécrit le fichier pour de vrai) c'est là que les gens se font avoir. Du coup ce truc construit la commande à ta place et étiquette chaque partie.
Le squelette, c'est sed '[address]command' file. L'adresse dit quelles lignes : un numéro, une plage comme 10,20, une /regex/. Si tu la sautes, sed touche à toutes les lignes. Ensuite la commande. C'est l'opération réelle. s substitue, d supprime, p affiche, et i avec a gèrent l'insert et l'append. La substitution a sa propre petite forme, s/find/replace/flags, et le g à la fin, c'est ce qui la fait taper chaque match sur une ligne au lieu de s'arrêter au premier. Facile à oublier, celui-là.
Les opérations que tu utiliseras le plus
| Objectif | Commande |
|---|---|
| Remplacer tous les "foo" par "bar" | sed 's/foo/bar/g' file |
| Remplacer seulement sur les lignes 10-20 | sed '10,20s/foo/bar/g' file |
| Supprimer les lignes vides | sed '/^$/d' file |
| Supprimer la ligne 3 | sed '3d' file |
| Afficher uniquement les lignes 5-10 | sed -n '5,10p' file |
| Éditer le fichier in-place | sed -i 's/foo/bar/g' file |
Édition in-place et sauvegardes
Par défaut, sed se contente d'afficher le résultat dans ton terminal et laisse le fichier tranquille. C'est la façon sûre de prévisualiser, et tu devrais en abuser. Ajoute -i et il réécrit le fichier sur place, sans annulation possible. Comme il n'y a pas d'undo, GNU sed te laisse accrocher un suffixe au flag pour garder une copie : -i.bak met l'original de côté sous le nom file.bak avant d'éditer. Ma règle, et c'est peut-être juste de la paranoïa après un mauvais après-midi, c'est de lancer une fois sans rien, de bien regarder la sortie, puis d'ajouter le flag. Encore un piège pour ceux qui passent d'une machine à l'autre : sur macOS et BSD le suffixe n'est pas optionnel. Tu dois lui donner quelque chose, même une chaîne vide (-i '').
Regex et délimiteurs
Par défaut le find pattern est une basic regular expression, donc tu vas devoir échapper des trucs, ou alors tu prends -E pour passer en extended regex. Voilà l'astuce qui vaut le coup. Quand ton pattern contient des slashs (les chemins de fichiers, cas classique) tu n'es pas obligé d'en backslasher chacun. sed prend le caractère que tu mets juste après s comme délimiteur, donc s|/old/path|/new/path|g marche tel quel et se lit beaucoup mieux. Ce générateur repère un slash dans ton texte et change le délimiteur tout seul, sans rien te demander.
Vie privée et fonctionnement de l'outil
Tout est en JavaScript, qui tourne ici même dans ton navigateur. Les patterns et les noms de fichiers que tu tapes restent sur ta machine, rien n'est envoyé ni journalisé. Aucun serveur ne fait le travail, donc la page continue de construire des commandes même connexion coupée.
Questions fréquentes
Comment remplacer du texte dans un fichier avec sed ?
sed 's/old/new/g' file affiche le texte modifié à l'écran. Passe à sed -i 's/old/new/g' file quand tu veux vraiment que le fichier soit réécrit. Ce g à la fin compte plus qu'il n'en a l'air : il attrape chaque occurrence sur une ligne. Si tu l'oublies, sed ne touche que le premier match par ligne, ce qui n'est presque jamais ce que tu voulais.
À quoi sert le flag g ?
Tout seul, substitute ne touche que le premier match d'une ligne et passe à la suivante. Le flag g (global) lui dit de continuer et de remplacer chaque match. Il existe aussi une variante moins connue : colle un nombre devant le g et il démarre à partir de ce match-là, donc s/a/b/2g saute le premier et change le reste.
Comment supprimer les lignes qui correspondent à un pattern ?
Mets un pattern devant la commande delete. sed '/pattern/d' file vire toutes les lignes qui le contiennent. Deux que tu utiliseras tout le temps : sed '/^$/d' enlève les lignes vides, sed '3d' tue la ligne 3 par son numéro. Tout ça s'affiche d'abord à l'écran. Ajoute -i quand tu es prêt à valider les suppressions dans le fichier lui-même.
Comment éditer un fichier in-place sans risque ?
Lance-le d'abord sans -i et lis la sortie. Franchement, cette seule habitude sauve plus de fichiers que n'importe quelle sauvegarde. Une fois que ça a l'air bon, passe à -i.bak pour que sed écrive le changement et range l'original sous le nom file.bak. Et si tu es sur du sed macOS ou BSD, tu ne peux pas zapper le suffixe, il est obligatoire, donc passe -i '' quand tu ne veux vraiment pas de backup.
Quand faut-il utiliser awk plutôt que sed ?
sed est l'outil quand le boulot se fait ligne par ligne, une substitution ici, une ligne supprimée là. À la seconde où tu commences à penser en colonnes et en champs, ou qu'il te faut de la vraie logique à travers les enregistrements, là c'est le terrain de awk. Ce ne sont pas des rivaux, en vrai. Plein de pipelines font tourner les deux, sed qui nettoie le texte et awk qui extrait ou triture les chiffres.