Sed Einzeiler
Mittwoch, 11. August 2021
Anmerkungen zu den nachfolgenden Beispielen
Alle Beispiele gelten für GNU sed. Einige Beispiele funktionieren mit anderen seds wie busybox sed nicht.
Für beliebige reguläre Ausdrücke steht in den Beispielen 'regexp'.
Pattern Space - nachfolgend kurz pattern
Der aktuelle Puffer von sed ist der 'pattern space'. Wenn sed eine Zeile einliest, wird diese hier gepuffert und kann manipuliert werden.
Hold Space - nachfolgend kurz hold
Der 'hold space' von sed ist ein Langzeit-Puffer . Wenn sed eine Zeile einliest, wird diese hier gepuffert und kann manipuliert werden.
Command | Aktion |
---|---|
d | pattern löschen |
h | pattern nach hold kopieren |
H | pattern an hold anhängen |
g | hold nach pattern kopieren |
G | hold an pattern anfügen |
x | Inhalt von hold und pattern vertauschen |
n | lese nächste Zeile in den pattern |
N | lese nächste Zeile an den pattern anfügen |
.
Zusätzliche Leerzeile/Zeilenvorschub einfügen
sed 'G' sample.txt
Alle Leerzeilen entfernen
sed '/^$/d' sample.txt
Eine Leerzeile/doppelter Zeilenabstand
sed '/^$/d;G' sample.txt
Über jeder Zeile, die "regex" enthält, eine Leerzeile einfügen
sed '/regex/{x;p;x;}' sample.txt
Alle Zeilen linksbündig nummerieren
sed '=' sample.txt | sed 'N;s/\n/\t/' # '=' aktuelle Zeilennummer mit '\n' drucken
Alle Zeilen rechtsbündig nummerieren
sed '=' sample.txt | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'
Zeilen zählen (wie "wc -l")
sed '$=;d' sample.txt # '$' match last line
DOS Zeilenvorschübe (CR/LF) ins Unix-Format (wie dos2unix)
sed 's/\r$//' sample.txt
Unix Zeilenvorschübe (LF) in das DOS-Format (wie unix2dos)
sed 's/$/\r/' sample.txt
Alle Leerzeichen und Tabulatoren vom Anfang jeder Zeile löschen
sed 's/^[ \t]*//' sample.txt
Alle Leerzeichen und Tabulatoren vom Ende jeder Zeile löschen
sed 's/[ \t]*$//' sample.txt
Suchen und Ersetzen "foo" mit "bar" in jeder Zeile
sed 's/foo/bar/g' sample.txt
Suchen und Ersetzen "foo" mit "bar" in jeder Zeile die "baz" enthalten
sed '/baz/s/foo/bar/g' sample.txt
Suchen und Ersetzen "foo" mit "bar" in jeder Zeile die "baz" nicht enthalten
sed '/baz/!s/foo/bar/g' sample.txt
Ersetze Leo, Pia oder Sina mit Hund
sed 's/Leo\|Pia\|\|Sina/Hund/g' sample.txt
Füge alle 5 Zeilen eine Leerzeile ein.
sed '0~5G' sample.txt # '0~5' (first~step) Match every step'th line starting with line first.