sed et awk sans l'angoisse de la man-page
sed et awk sont deux petits programmes Unix qui déplacent du texte. sed édite les fichiers ligne par ligne (remplacer, supprimer, insérer). awk lit des tableaux et fait des maths ou du filtrage sur des colonnes. Ils sont sur chaque Mac, chaque box Linux, chaque serveur où vous SSH. Ils n'ont pas besoin d'installation. Ils sont aussi célèbrement cryptiques : la syntaxe a été conçue en 1977 et n'a jamais été mise à jour.
Ce helper construit la commande pour vous. Choisissez une action (substituer, supprimer une ligne, imprimer des colonnes, sommer une colonne...), remplissez les inputs, et la commande de droite apparaît à droite. En dessous, un aperçu en direct lance la même logique dans votre navigateur sur du texte exemple que vous pouvez éditer, vous voyez donc le résultat avant de copier et coller.
Nous couvrons le sous-ensemble le plus utile des deux outils (substituer, supprimer, insérer / append / changer des lignes, imprimer des plages pour sed ; imprimer des colonnes, print conditionnel, count, sum, average, filter, programme custom pour awk), avec un livre de recettes de 20 recettes prêtes : supprimer les lignes vides, écraser les espaces, sommer une colonne, grouper par colonne et compter, convertir CSV en TSV, et plus. Cliquez sur n'importe quelle recette pour la charger dans le builder.
Réserve : l'aperçu utilise la regex JavaScript, qui est proche de la regex POSIX étendue mais pas identique à GNU sed ou BSD sed. Pour les substitutions et travaux de colonne quotidiens, il donne la bonne réponse. Pour les cas limites (look-arounds, frontières de mots locale-aware, plages d'adresses complexes), consultez la FAQ.
Comment l'utiliser
- Choisissez l'outil en haut : sed pour les édits ligne entière (replace, delete, print, insert) et awk pour les colonnes (imprimer une colonne, sum, filter par valeur).
- En mode sed, choisissez l'action (Substitute, Delete, Print only matching, Insert before line N, Append after line N, Replace line N, Print lines N to M). Les bons inputs apparaissent en dessous.
- Tapez votre pattern et replacement pour substitute, ou un numéro de ligne pour insert / append / change. Les flags (g, i, p, Nth) sont des chips que vous cliquez activés ou désactivés.
- Éditez l'input exemple à droite pour correspondre à la forme de vos vraies données. La zone de sortie se met à jour en direct : vous voyez exactement ce que fait la commande avant de la copier.
- Activez l'édition in-place si vous voulez le fichier modifié directement (`-i`). Choisissez GNU pour Linux ou BSD pour macOS, le helper affiche la bonne variante (`-i` versus `-i ""`).
- En mode awk, choisissez un séparateur de champ (whitespace par défaut, virgule pour CSV, point-virgule, tab, ou un caractère custom). Puis choisissez une action : imprimer colonne N, print conditionnel, compter les matches, sum, average, filter, ou écrire un programme custom.
- Ouvrez le livre de recettes en bas pour 20 recettes prêtes (10 pour sed, 10 pour awk). Cliquez sur n'importe quelle recette pour la charger dans le builder, l'éditer, et copier la commande finale.
- Copiez la commande depuis le côté droit. Collez dans votre terminal avec votre vrai nom de fichier au lieu de `file.txt`. La zone de sortie est pour vérification, pas pour des données de production : lancez la vraie commande sur votre fichier quand vous faites confiance au résultat.
Quand c'est utile
Six vrais moments où sed ou awk vous fait gagner des minutes (ou des heures) :
- Remplacement en masse d'une string à travers plusieurs fichiers. Vous avez renommé une variable de `userId` en `accountId` dans un projet. `sed -i 's/userId/accountId/g' src/**/*.ts` fait toute la codebase en une commande, plus rapide que le "find in files" de votre IDE et marche en SSH sur un serveur.
- Nettoyer un fichier log avant analyse. Le log a des lignes vides, du bruit debug et 50 colonnes alors que vous n'en avez besoin que de 3. `awk '/ERROR/ { print $1, $5, $9 }'` ne garde que les lignes d'erreur et seulement les colonnes timestamp, statut et message. Une ligne, pas de bibliothèque de parsing.
- Convertir entre CSV et TSV. Un outil exporte CSV, votre autre outil veut TSV. `awk -F',' '{$1=$1; print}' OFS='\t'` échange les séparateurs d'un coup, pas de Python, pas d'Excel, pas de fichiers temporaires.
- Extraire une plage de dates d'un fichier. Vous avez besoin des lignes 1000 à 2000 d'un log de 50 000 lignes. `sed -n '1000,2000p' file.log` est instantanément la réponse, et marche sur un serveur distant sans outils supplémentaires.
- Sommer une colonne d'un rapport. Le comptable a envoyé un CSV de factures. Vous voulez le total. `awk -F',' '{ sum += $5 } END { print sum }' invoices.csv` ajoute la colonne 5 à travers chaque ligne en millisecondes.
- Renommer des fichiers dans un dossier. Vous avez des centaines de fichiers comme `IMG_001.jpg` et vous voulez qu'ils soient en minuscules et datés. Une boucle avec `sed` construisant chaque nouveau nom fait le renommage sans une seule ligne de code : juste de la colle shell.