NSAS Wiki

Network System Access Solutions

User Tools

Site Tools


Sidebar

Contact

linux:sed

Sed - Stream Line Editor

Zeilen Abstaende

Doppelter Zeilenvorschub

sed G

Doppelter Zeilenabstand für Dateien, die Leerzeilen enthalten. Die Ausgabe sollte keine zwei aufeinander folgenden Leerzeilen enthalten.

sed '/^$/d;G'

Dreifacher Zeilenvorschub

sed 'G;G'

Doppelter Zeilenvorschub rückgängig machen (Annahme: jede zweite Zeile ist leer)

sed 'n;d'

Füge eine Leerzeile über jeder Zeile ein, die “regex” enthält

sed '/regex/{x;p;x;}'

Füge eine Leerzeile unter jeder Zeile ein, die “regex” enthält

sed '/regex/G'

Füge eine Leerzeile über und unter jeder Zeile ein, die “regex” enthält

sed '/regex/{x;p;x;G;}'

Nummerierung

Nummeriere alle Zeilen (linksbündig). Der Tabulator anstelle von Leerzeichen erhält den Rand. (siehe auch die Bemerkung zu '\t' am Ende dieser Datei)

sed = filename | sed 'N;s/\n/\t/'

Nummeriere alle Zeilen (Zahl rechtsbündig in linker Spalte)

sed = filename | sed 'N; s/^/     /; s/ *\(.\{6,\}\)\n/\1  /'

Nummeriere alle Zeilen, aber die Nummern von Leerzeilen werden nicht ausgegeben.

sed '/./=' filename | sed '/./N; s/\n/ /'

Zeilen zählen (Nachahmung von “wc -l”)

sed -n '$='

Text umwandeln

Lösche alle Einrückungen (Leerzeichen, Tabulatoren) vom Anfang jeder Zeile Richtet alle Zeilen linksbündig aus.

sed 's/^[ \t]*//'

Lösche unsichtbare Zeichen (Leerzeichen, Tabulatoren) vom Ende aller Zeilen

sed 's/[ \t]*$//'

Lösche unsichtbare Zeichen sowohl am Anfang als auch am Ende jeder Zeile

sed 's/^[ \t]*//;s/[ \t]*$//'

Füge 5 Leerzeichen am Anfang jeder Zeile ein.

sed 's/^/     /'

Alle Zeilen rechtsbündig ausrichten (Spaltenbreite: 79 Zeichen)

sed -e :a -e 's/^.\{1,78\}$/ &/;ta'

# set at 78 plus 1 space

Ersetze (Suchen und Ersetzen)

Ersetzt nur das 1. Vorkommen pro Zeile

sed 's/foo/bar/'

Ersetzt nur das 4. Vorkommen pro Zeile

sed 's/foo/bar/4'

Ersetzt ALLE Vorkommen von “foo” mit “bar”

sed 's/foo/bar/g'

Ersetzt nur das vorletzte Vorkommen pro Zeile

sed 's/\(.*\)foo\(.*foo\)/\1bar\2/'

Ersetzt nur das letzte Vorkommen pro Zeile

sed 's/\(.*\)foo/\1bar/'

Ersetze “foo” mit “bar” NUR in Zeilen die “baz” enthalten

sed '/baz/s/foo/bar/g'

Ersetze “foo” mit “bar” AUSSER in Zeilen die “baz” enthalten

sed '/baz/!s/foo/bar/g'

Ersetze “scarlet”, “ruby” oder “puce” mit “red”

sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'

Kehre die Reihenfolge der Zeilen um (entspricht “tac”)

sed '1!G;h;$!d'

Kehre die Reihenfolge der Buchstaben innerhalb jeder Zeile um (entspricht “rev”)

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

Füge Zeilenpaare nebeneinander zusammen (entspricht “paste”)

sed '$!N;s/\n/ /'

Falls eine Zeile mit einem Rückwärtsstrich “\” endet, füge die nächste hinzu.

sed -e :a -e '/\\$/N; s/\\\n//; ta'

Falls eine Zeile mit einem Gleichheitszeichen “=” beginnt, füge die vorhergehende hinzu und ersetzt das “=” mit einem Leerzeichen.

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

Füge Kommas in Zahlenfolgen ein. Aus “1234567” wird “1,234,567”

sed ':a;s/\B[0-9]\{3\}\>/,&/;ta'

Füge Kommas in Zahlenfolgen mit Dezimalpunkt und Vorzeichen ein. (GNU sed)

sed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'

Füge alle 5 Zeilen eine Leerzeile ein. (Nach 5, 10, 15, 20,… Zeilen)

sed '0~5G'

Loescht alle Zahlen in einem string

sed 's/[0-9]*//g'

Ausgewaehlte Zeilen anzeigen

Ausgabe der ersten 10 Zeilen einer Datei (wie “head”)

sed 10q

Ausgabe der ersten Zeilen einer Datei (wie “head -1”)

sed q

Ausgabe der letzten 10 Zeilen einer Datei (wie “tail”)

sed '$!N;$!D

Ausgabe der letzten Zeilen einer Datei (wie “tail -1”)

sed '$!d'

Ausgabe der Zeilen, die durch den Regulären Ausdruck (Regex) definiert sind (wie “grep”)

sed -n '/regexp/p'

Ausgabe der Zeilen, die den Reguläre Ausdruck NICHT erfüllen (wie “grep -v”)

sed -n '/regexp/!p'

Ausgabe der Zeile direkt unterhalb des Regex, jedoch nicht die Zeile die den Regex erfüllt

sed -n '/regexp/{n;p;}'

Ausgabe eine umgebende Zeile vor und nach der Regex, mit Angabe der Zeilennummer der Zeile, die den Regex erfüllt. (ähnlich “grep -A1 -B1”)

sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

Suche nach AAA und BBB und CCC (in beliebiger Reihenfolge)

sed '/AAA/!d; /BBB/!d; /CCC/!d'

Suche nach AAA und BBB und CCC (in vorgegebener Reihenfolge)

sed '/AAA.*BBB.*CCC/!d'

Ausgabe der Zeilen die 65 Zeichen lang oder länger sind

sed -n '/^.\{65\}/p'

Ausgabe der Zeilen die kürzer als 65 Zeichen sind

sed -n '/^.\{65\}/!p'

Ausgabe der Datei ab dem regulären Ausdruck bis zum Ende

sed -n '/regexp/,$p'

Ausgabe von Zeile 52

sed -n '52p

Ausgabe jeder 7. Zeile - beginnend bei Zeile 3

sed -n '3~7p'

Ausgabe des Teils der Datei, der zwischen den regulären Ausdrücken ist

sed -n '/Iowa/,/Montana/p'

Loeschen bestimmter Zeilen

Ausgabe der Datei, AUSSER dem Teil, der zwischen den regulären Ausdrücken ist

sed '/Iowa/,/Montana/d'

Löschung von aufeinander folgenden, identischen Zeilen (wie “uniq”).

sed '$!N; /^\(.*\)\n\1$/!P; D'

Löscht die ersten 10 Zeilen einer Datei

sed '1,10d'

Löscht die letzte Zeile einer Datei

sed '$d'

Löscht die 10 letzten Zeilen einer Datei

sed -e :a -e '$d;N;2,10ba' -e 'P;D'

Lösche jede 8. Zeile

sed '0~8d'

Lösche Zeilen die die Regex erfüllen

sed '/pattern/d'

Lösche ALLE Leerzeilen aus einer Datei (wie “grep '.' ”)

sed '/^$/d'

oder

sed '/./!d'

Lösche alle AUFEINANDER FOLGENDEN Leerzeilen außer der ersten;

sed '/./,/^$/!d'

Lösche alle Leerzeilen am Anfang einer Datei

sed '/./,$!d'

Spezielle Einsatzgebiete

Die Betreffzeile einer E-Mail, aber ohne das “Subject: ” am Zeilenanfang

sed '/^Subject: */!d; s///;q'

Die Antwortadresse einer E-Mail

sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

Extrahiert die E-Mail-Adresse aus der Antwortadresse des vorherigen Scripts

sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'

Entferne die meisten HTML-Auszeichnungen (inklusive die über mehrere Zeilen)

sed -e :a -e 's/<[^>]*>//g;/</N;//ba'

Files veraendern

Inhalt in einer Datei veraendern

sed -i "s/.*PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config

Loescht ab einem definerten Zeichen oder Wort bis ende der Zeile

sed s'/<?xml.*//' FILE
echo "blaa;das;das<?xml sdfdsfsddfsdf" | sed s'/<?xml.*//'

Files recusive veraendern

find /DIR -type f -exec sed -i 's/SEARCHSTRING/REPLACESTRING/g' {} +
linux/sed.txt · Last modified: 2013/05/23 11:36 (external edit)