RÉFÉRENCE RAPIDE SED
Édition de flux, substitution, adresses, espace tampon, transformations en place
Bases
Exécuter sed
sed 's/old/new/' file.txt # substitute first match per line
sed 's/old/new/g' file.txt # substitute all matches per line
sed -n '5p' file.txt # print only line 5
sed '3d' file.txt # delete line 3
echo "hello" | sed 's/hello/hi/' # pipe input
Options de ligne de commande
| -n | Supprimer l'impression automatique ; imprimer uniquement avec p |
| -e 'cmd' | Exécuter une commande sed (enchaîner avec plusieurs -e) |
| -f script.sed | Lire les commandes depuis un fichier |
| -i[suffix] | Modifier le fichier en place (suffixe de sauvegarde optionnel) |
| -E / -r | Utiliser les expressions régulières étendues |
Substitution
Syntaxe de substitution
sed 's/foo/bar/' f # first occurrence per line
sed 's/foo/bar/g' f # all occurrences
sed 's/foo/bar/3' f # 3rd occurrence only
sed 's/foo/bar/gi' f # all, case-insensitive
sed 's|/usr/bin|/opt/bin|g' f # alternate delimiter
Indicateurs de substitution
| g | Remplacer toutes les occurrences sur la ligne |
| N (number) | Remplacer uniquement la N-ième occurrence |
| p | Imprimer la ligne si une substitution a été faite |
| w file | Écrire les lignes substituées dans un fichier |
| i / I | Correspondance insensible à la casse (GNU) |
Adresses
Exemples d'adresses
sed '3s/a/b/' f # only on line 3
sed '2,5s/a/b/' f # lines 2 through 5
sed '/^#/d' f # delete lines starting with #
sed '/start/,/end/d' f # delete range between patterns
sed '1~2d' f # delete odd-numbered lines (GNU)
Types d'adresses
| N | Numéro de ligne N |
| $ | Dernière ligne |
| N,M | Plage de lignes de N à M |
| /regex/ | Lignes correspondant à regex |
| /regex1/,/regex2/ | Plage de la première à la deuxième correspondance |
| N~step | À partir de N, chaque N-ième ligne (GNU) |
| addr! | Négation — appliquer aux lignes non correspondantes |
Suppression et impression
Commandes de suppression et impression
sed '5d' f # delete line 5
sed '/^$/d' f # delete blank lines
sed -n '10,20p' f # print lines 10–20
sed -n '/error/p' f # print lines matching pattern
sed '/debug/!d' f # keep only matching lines
Référence des commandes
| d | Supprimer l'espace de motif, démarrer le cycle suivant |
| D | Supprimer jusqu'au premier saut de ligne dans l'espace de motif |
| p | Imprimer l'espace de motif |
| P | Imprimer jusqu'au premier saut de ligne dans l'espace de motif |
| q | Quitter après avoir imprimé l'espace de motif actuel |
| Q | Quitter sans imprimer (GNU) |
Insertion et ajout
Insérer, ajouter, changer
sed '3i\inserted line' f # insert before line 3
sed '3a\appended line' f # append after line 3
sed '3c\replaced line' f # replace line 3
sed '/marker/a\new line' f # append after pattern match
Commandes
| i\text | Insérer du texte avant la ligne actuelle |
| a\text | Ajouter du texte après la ligne actuelle |
| c\text | Remplacer la ligne actuelle par du texte |
| r file | Lire et ajouter le contenu d'un fichier |
| R file | Lire et ajouter une ligne depuis un fichier (GNU) |
| w file | Écrire l'espace de motif dans un fichier |
Espace tampon
Commandes de l'espace tampon
| h | Copier l'espace de motif dans l'espace tampon |
| H | Ajouter l'espace de motif à l'espace tampon |
| g | Copier l'espace tampon dans l'espace de motif |
| G | Ajouter l'espace tampon à l'espace de motif |
| x | Échanger les espaces de motif et tampon |
Exemples d'espace tampon
sed -n '1!G;h;$p' f # reverse lines (tac)
sed '/^$/{ x; s/\n//; x; }' f # collapse hold on blank
sed -n 'H;${x;s/\n/ /g;p;}' f # join all lines with space
Commandes multiples
Enchaîner les commandes
sed -e 's/foo/bar/g' -e 's/baz/qux/g' f
sed 's/foo/bar/g; s/baz/qux/g' f
sed '/header/{ s/old/new/; s/foo/bar/; }' f
sed -f commands.sed input.txt
Regroupement et branchement
| { cmd1; cmd2; } | Regrouper des commandes pour la même adresse |
| :label | Définir une étiquette de branchement |
| b label | Branchement (saut) vers une étiquette |
| t label | Brancher si le dernier s/// a réussi |
| T label | Brancher si le dernier s/// a échoué (GNU) |
Édition en place
Exemples d'édition en place
sed -i 's/old/new/g' file.txt # edit in place (GNU)
sed -i.bak 's/old/new/g' file.txt # backup as file.txt.bak
sed -i '' 's/old/new/g' file.txt # macOS in-place (no backup)
sed -i '/^#/d' config.txt # remove comments in place
Notes sur les plateformes
| GNU sed -i | Le suffixe est optionnel ; -i seul édite sans sauvegarde |
| BSD/macOS sed -i | Requiert un argument suffixe ; utiliser -i '' pour aucune sauvegarde |
| -i.bak | Crée un fichier de sauvegarde avec l'extension .bak |
| Multiple files | sed -i 's/a/b/g' *.txt édite tous les fichiers correspondants |
Regex
Regex dans sed
| . | N'importe quel caractère unique |
| * | Zéro ou plusieurs du précédent |
| \+ | Un ou plusieurs (BRE) — + en ERE |
| \? | Zéro ou un (BRE) — ? en ERE |
| ^ | Début de ligne |
| $ | Fin de ligne |
| [abc] | Classe de caractères |
| \( \) | Groupe capturant (BRE) — () en ERE |
| \1, \2 | Référence arrière au groupe capturant |
| & | Chaîne entière correspondante (dans le remplacement) |
Exemples de regex
sed 's/[0-9]\+/NUM/g' f # replace numbers
sed -E 's/(foo)(bar)/\2\1/g' f # swap groups (ERE)
sed 's/.*/(&)/' f # wrap line in parens
sed 's/[ \t]*$//' f # strip trailing whitespace
Motifs courants
Lignes de commande courtes
sed -n '1p' f # first line (head -1)
sed '$!d' f # last line (tail -1)
sed '/^$/d' f # remove blank lines
sed 's/^[ \t]*//' f # strip leading whitespace
sed '=' f | sed 'N;s/\n/\t/' f # number lines
Recettes
| Double-space | sed G — ajouter une ligne vide après chaque ligne |
| Remove HTML tags | sed 's/<[^>]*>//g' |
| Extract emails | sed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p' |
| Comment lines | sed 's/^/# /' — préfixer chaque ligne avec # |
| Trim blank lines at EOF | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' |
| Replace nth line | sed 'Nc\new text' — remplacer la ligne N |