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
-nSupprimer l'impression automatique ; imprimer uniquement avec p
-e 'cmd'Exécuter une commande sed (enchaîner avec plusieurs -e)
-f script.sedLire les commandes depuis un fichier
-i[suffix]Modifier le fichier en place (suffixe de sauvegarde optionnel)
-E / -rUtiliser 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
gRemplacer toutes les occurrences sur la ligne
N (number)Remplacer uniquement la N-ième occurrence
pImprimer la ligne si une substitution a été faite
w fileÉcrire les lignes substituées dans un fichier
i / ICorrespondance 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
NNuméro de ligne N
$Dernière ligne
N,MPlage 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
dSupprimer l'espace de motif, démarrer le cycle suivant
DSupprimer jusqu'au premier saut de ligne dans l'espace de motif
pImprimer l'espace de motif
PImprimer jusqu'au premier saut de ligne dans l'espace de motif
qQuitter après avoir imprimé l'espace de motif actuel
QQuitter 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\textInsérer du texte avant la ligne actuelle
a\textAjouter du texte après la ligne actuelle
c\textRemplacer la ligne actuelle par du texte
r fileLire et ajouter le contenu d'un fichier
R fileLire 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
hCopier l'espace de motif dans l'espace tampon
HAjouter l'espace de motif à l'espace tampon
gCopier l'espace tampon dans l'espace de motif
GAjouter 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
:labelDéfinir une étiquette de branchement
b labelBranchement (saut) vers une étiquette
t labelBrancher si le dernier s/// a réussi
T labelBrancher 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 -iLe suffixe est optionnel ; -i seul édite sans sauvegarde
BSD/macOS sed -iRequiert un argument suffixe ; utiliser -i '' pour aucune sauvegarde
-i.bakCrée un fichier de sauvegarde avec l'extension .bak
Multiple filessed -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, \2Ré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-spacesed G — ajouter une ligne vide après chaque ligne
Remove HTML tagssed 's/<[^>]*>//g'
Extract emailssed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p'
Comment linessed 's/^/# /' — préfixer chaque ligne avec #
Trim blank lines at EOFsed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Replace nth linesed 'Nc\new text' — remplacer la ligne N