Nozioni di base
Esecuzione di 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
Flag da riga di comando
-nSopprime la stampa automatica; stampa solo con p
-e 'cmd'Esegue un comando sed (concatena più con -e)
-f script.sedLegge i comandi da un file
-i[suffisso]Modifica il file in-place (suffisso di backup opzionale)
-E / -rUsa espressioni regolari estese
Sostituzione
Sintassi della sostituzione
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
Flag di sostituzione
gSostituisce tutte le occorrenze sulla riga
N (numero)Sostituisce solo la N-esima occorrenza
pStampa la riga se la sostituzione è avvenuta
w fileScrive le righe sostituite su file
i / ICorrispondenza case-insensitive (GNU)
Indirizzi
Esempi di indirizzo
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)
Tipi di indirizzo
NRiga numero N
$Ultima riga
N,MIntervallo di righe da N a M
/regex/Righe che corrispondono alla regex
/regex1/,/regex2/Intervallo dalla prima alla seconda corrispondenza
N~stepA partire da N, ogni step righe (GNU)
addr!Negazione — applica alle righe non corrispondenti
Elimina e stampa
Comandi di eliminazione e stampa
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
Riferimento comandi
dElimina il pattern space, inizia il ciclo successivo
DElimina fino al primo newline nel pattern space
pStampa il pattern space
PStampa fino al primo newline nel pattern space
qEsce dopo aver stampato il pattern space corrente
QEsce senza stampare (GNU)
Inserisci e aggiungi
Inserimento, aggiunta, modifica
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
Comandi
i\testoInserisce testo prima della riga corrente
a\testoAggiunge testo dopo la riga corrente
c\testoSostituisce la riga corrente con testo
r fileLegge e aggiunge il contenuto del file
R fileLegge e aggiunge una riga dal file (GNU)
w fileScrive il pattern space su file
Hold space
Comandi dell'hold space
hCopia il pattern space nell'hold space
HAggiunge il pattern space all'hold space
gCopia l'hold space nel pattern space
GAggiunge l'hold space al pattern space
xScambia pattern e hold space
Esempi con hold space
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
Comandi multipli
Concatenazione di comandi
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
Raggruppamento e diramazione
{ cmd1; cmd2; }Raggruppa comandi per lo stesso indirizzo
:etichettaDefinisce un'etichetta di diramazione
b etichettaSalta all'etichetta
t etichettaSalta se l'ultimo s/// è riuscito
T etichettaSalta se l'ultimo s/// è fallito (GNU)
Modifica in-place
Esempi in-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
Note di piattaforma
GNU sed -iIl suffisso è opzionale; -i da solo modifica senza backup
BSD/macOS sed -iRichiede argomento suffisso; usa -i '' per nessun backup
-i.bakCrea un file di backup con estensione .bak
File multiplised -i 's/a/b/g' *.txt modifica tutti i file corrispondenti
Regex
Regex in sed
.Qualsiasi carattere singolo
*Zero o più del precedente
\+Uno o più (BRE) — + in ERE
\?Zero o uno (BRE) — ? in ERE
^Inizio riga
$Fine riga
[abc]Classe di caratteri
\( \)Gruppo di cattura (BRE) — () in ERE
\1, \2Backreference al gruppo di cattura
&Intera stringa corrispondente (nella sostituzione)
Esempi di 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
Pattern comuni
One-liner
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
Ricette
Doppio spaziosed G — aggiunge riga vuota dopo ogni riga
Rimuovi tag HTMLsed 's/<[^>]*>//g'
Estrai emailsed -nE 's/.*([a-z]+@[a-z.]+).*/\1/p'
Commenta righesed 's/^/# /' — prefissa ogni riga con #
Elimina righe vuote a fine filesed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
Sostituisci riga N-esimased 'Nc\nuovo testo' — sostituisce la riga N