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.

Anmelden