Willkommen zum zweiten Teil unserer Serie, einem Teil, der sich auf sed, die GNU-Version, konzentrieren wird. Wie Sie sehen werden, gibt es mehrere Varianten von sed, das für eine ganze Reihe von Plattformen verfügbar ist, aber wir werden uns auf die GNU sed-Versionen 4.x konzentrieren. Viele von Ihnen haben schon von sed gehört und es auch schon benutzt, hauptsächlich als Ersetzungswerkzeug. Aber das ist nur ein Ausschnitt dessen, was sed kann, und wir werden unser Bestes tun, um Ihnen so viel wie möglich von dem zu zeigen, was Sie damit machen können. Der Name steht für Stream EDitor, und „Stream“ kann hier eine Datei, eine Pipe oder einfach stdin sein. Wir erwarten, dass Sie grundlegende Linux-Kenntnisse haben, und wenn Sie bereits mit regulären Ausdrücken gearbeitet haben oder zumindest wissen, was ein regexp ist, umso besser. Wir haben nicht den Platz für ein komplettes Tutorial über reguläre Ausdrücke, also werden wir Ihnen stattdessen nur eine grundlegende Idee und viele sed-Beispiele geben. Es gibt viele Dokumente, die sich mit dem Thema beschäftigen, und wir haben sogar einige Empfehlungen, wie Sie gleich sehen werden.
Installation
Es gibt hier nicht viel zu erzählen, denn die Chancen stehen gut, dass Sie sed bereits installiert haben, da es in verschiedenen System-Skripten verwendet wird und ein unschätzbares Werkzeug im Leben eines Linux-Benutzers ist, der effizient sein will. Sie können testen, welche Version Sie haben, indem Sie
$ sed --version
Auf meinem System sagt mir dieser Befehl, dass ich GNU sed 4.2.1 installiert habe, plus Links zur Homepage und anderen nützlichen Dingen. Das Paket heißt einfach ’sed‘, unabhängig von der Distribution, aber wenn Gentoo sed implizit anbietet, können Sie sich darauf verlassen.
Konzepte
Bevor wir weitermachen, ist es wichtig, darauf hinzuweisen, was genau sed macht, denn bei „Stream-Editor“ klingeln vielleicht nicht allzu viele Glocken. sed nimmt den Eingabetext, führt die angegebenen Operationen in jeder Zeile aus (sofern nicht anders angegeben) und gibt den veränderten Text aus. Die angegebenen Operationen können anhängen, einfügen, löschen oder ersetzen sein. Das ist nicht so einfach, wie es vielleicht aussieht: Seien Sie gewarnt, dass es eine Menge Optionen und Kombinationen gibt, die einen sed-Befehl ziemlich schwer verdaulich machen können. Wenn Sie sed also benutzen wollen, empfehlen wir Ihnen, die Grundlagen von regexps zu lernen, und den Rest können Sie sich nach und nach aneignen. Bevor wir mit dem Tutorial beginnen, möchten wir Eric Pement und anderen für die Inspiration danken und für das, was er für alle getan hat, die sed lernen und benutzen wollen.
Das UAF Geophysical Institute, sucht einen erfahrenen Linux Systems Analysten zur Verstärkung des Teams von Analysten und Ingenieuren für die Forschungs-Cyberinfrastruktur. STANDORT: Fairbanks, Alaska, USA
JETZT BEWERBEN
Reguläre Ausdrücke
Da sed-Befehle/Skripte dazu neigen, kryptisch zu werden, sind wir der Meinung, dass unsere Leser die grundlegenden Konzepte verstehen müssen, anstatt blindlings Befehle zu kopieren und einzufügen, deren Bedeutung sie nicht kennen. Wenn man verstehen will, was eine regexp ist, ist das Schlüsselwort „matching“. Oder noch besser: „Mustervergleich“. Ein Beispiel: In einem Bericht für Ihre Personalabteilung haben Sie den Namen Nick geschrieben, wenn es um den Netzwerkarchitekten ging. Aber Nick ist weitergezogen und John hat seinen Platz eingenommen, also müssen Sie jetzt das Wort Nick durch John ersetzen. Wenn die Datei report.txt heißt, könnten Sie so vorgehen
$ cat report.txt | sed 's/Nick/John/g' > report_new.txt
Standardmäßig verwendet sed stdout, also sollten Sie den Umleitungsoperator Ihrer Shell verwenden, wie in unserem Beispiel unten. Dies ist ein sehr einfaches Beispiel, aber wir haben ein paar Punkte illustriert: Wir suchen nach dem Muster „Nick“ und ersetzen alle Instanzen durch „John“. Beachten Sie, dass sed zwischen Groß- und Kleinschreibung unterscheidet, seien Sie also vorsichtig und überprüfen Sie Ihre Ausgabedatei, um zu sehen, ob alle Ersetzungen vorgenommen wurden. Das obige hätte auch so geschrieben werden können:
$ sed 's/Nick/John/g' report.txt > report_new.txt
OK, aber wo sind die regulären Ausdrücke, fragen Sie? Nun, wir wollten Sie erst einmal mit dem Konzept des Abgleichs vertraut machen und hier kommt der interessante Teil.
Wenn Sie sich nicht sicher sind, ob Sie versehentlich „nick“ statt „Nick“ geschrieben haben und auch das abgleichen wollen, könnten Sie sed ’s/Nick|nick/John/g‘ verwenden. Der vertikale Balken hat dieselbe Bedeutung, die Sie vielleicht kennen, wenn Sie C verwenden, nämlich, dass Ihr Ausdruck auf Nick oder nick passt. Wie Sie sehen werden, kann die Pipe auch auf andere Weise verwendet werden, aber ihre Bedeutung bleibt erhalten. Andere in Regexps häufig verwendete Operatoren sind ‚?‘, die auf null oder eine Instanz des vorangehenden Elements passen (flavou?r passt auf flavor und flavour), ‚*‘ bedeutet null oder mehr und ‚+‘ passt auf ein oder mehrere Elemente. ‚^‘ passt auf den Anfang der Zeichenkette, während ‚ Wenn Sie ein vi(m)-Benutzer sind, kommen Ihnen einige dieser Dinge vielleicht bekannt vor. Schließlich haben diese Hilfsprogramme, zusammen mit awk oder C, ihre Wurzeln in den frühen Tagen von Unix. Wir werden nicht weiter auf das Thema eingehen, da die Dinge durch das Lesen von Beispielen einfacher werden, aber was Sie wissen sollten, ist, dass es verschiedene Implementierungen von regexps gibt: POSIX, POSIX Extended, Perl oder verschiedene Implementierungen von unscharfen regulären Ausdrücken, die Ihnen garantiert Kopfschmerzen bereiten werden.
sed-Beispiele
Lernen des Linux-Befehls sed mit Beispielen | |
---|---|
Linux-Befehlssyntax | Linux-Befehlsbeschreibung |
sed 's/Nick/John/g' report.txt |
Ersetzen Sie jedes Vorkommen von Nick durch John im Bericht.txt |
sed 's/Nick|nick/John/g' report.txt |
Ersetzen Sie jedes Vorkommen von Nick oder nick durch John. |
sed 's/^/ /' file.txt >file_new.txt |
Hinzufügen von 8 Leerzeichen links vom Text für einen schönen Druck. |
sed -n '/Of course/,/attention you \ |
Nur einen Absatz anzeigen, beginnend mit „Natürlich“ und endend mit „Achtung Sie zahlen“ |
sed -n 12,18p file.txt |
Zeige nur die Zeilen 12-18 der Datei.txt |
sed 12,18d file.txt |
Gesamtes von Datei anzeigen.txt mit Ausnahme der Zeilen 12 bis 18 |
sed G file.txt |
Doppelte Leerzeichen in Datei.txt |
sed -f script.sed file.txt |
Alle Befehle in script.sed und führen Sie sie aus |
sed '5!s/ham/cheese/' file.txt |
Ersetzen Sie Schinken durch Käse in file.txt außer in der 5. Zeile |
sed '$d' file.txt |
Lösche die letzte Zeile |
sed '/\{3\}/p' file.txt |
Nur Zeilen mit drei aufeinanderfolgenden Ziffern drucken |
sed '/boom/!s/aaa/bb/' file.txt |
Wenn kein Boom gefunden wird, aaa durch bb ersetzen |
sed '17,/disk/d' file.txt |
Löschen alle Zeilen von Zeile 17 bis ‚disk‘ |
echo ONE TWO | sed "s/one/unos/I" |
Ersetzt eins mit unos in einer Groß- und Kleinschreibunginsensitive manner, So wird „unos TWO“ |
sed 'G;G' file.txt |
Dreifach-Space eine Datei |
sed 's/.$//' file.txt |
Eine Möglichkeit, dos2unix zu ersetzen 🙂 |
sed 's/^*//' file.txt |
Löschen Sie alle Leerzeichen vor jeder Zeile der Datei.txt |
sed 's/*$//' file.txt |
Löschen Sie alle Leerzeichen am Ende jeder Zeile der Datei.txt |
sed 's/^*//;s/*$//' file.txt |
Lösche alle Leerzeichen vor und am Ende jeder Zeile der Datei.txt |
sed 's/foo/bar/' file.txt |
Ersetzen Sie foo durch bar nur bei der ersten Instanz in einer Zeile. |
sed 's/foo/bar/4' file.txt |
Ersetzen Sie foo durch bar nur bei der vierten Instanz in einer Zeile. |
sed 's/foo/bar/g' file.txt |
Ersetzen Sie foo durch bar für alle Instanzen in einer Zeile. |
sed '/baz/s/foo/bar/g' file.txt |
Nur wenn Zeile baz enthält, foo durch bar ersetzen |
sed '/./,/^$/!d' file.txt |
Alle aufeinanderfolgenden Leerzeilen löschen Zeilen außer EOF |
sed '/^$/N;/\n$/D' file.txt |
Lösche alle aufeinanderfolgenden Leerzeilen, aber erlaubt nur obere Leerzeile |
sed '/./,$!d' file.txt |
Alle führenden Leerzeilen löschen |
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' \ |
Alle nachgestellten Leerzeilen löschen |
sed -e :a -e '/\$/N; s/\\n//; ta' \ |
Wenn eine Datei mit einem Backslash endet, mit dem nächsten verbinden (nützlich für Shell-Skripte) |
sed '/regex/,+5/expr/' |
Match regex plus die nächsten 5 Zeilen |
sed '1~3d' file.txt |
Lösche jede dritte Zeile, beginnend mit der ersten |
sed -n '2~5p' file.txt |
Drucke jede fünfte Zeile beginnend mit der zweiten |
sed 's/ick/John/g' report.txt |
Eine andere Art, ein Beispiel oben zu schreiben. Können Sie erraten, welche? |
sed -n '/RE/{p;q;}' file.txt |
Drucke nur die erste Übereinstimmung von RE (regulärer Ausdruck) |
sed '0,/RE/{//d;}' file.txt |
Nur den ersten Treffer löschen |
sed '0,/RE/s//to_that/' file.txt |
Nur den ersten Treffer ändern |
sed 's/^*,/9999,/' file.csv |
Ändern erstes Feld in einer CSV-Datei auf 9999 |
s/^ *\(.*\) *$/||/; |
sed script to convert CSV file to bar-getrennt (funktioniert nur bei einigen Typen von CSV, mit eingebetteten „s und Kommas) |
sed ':a;s/\(^\|\)\(\+\)\ |
Ändern Sie Zahlen aus Datei.txt von 1234.56 form in 1.234.56 |
sed -r "s/\<(reg|exp)+/\U&/g" |
Konvertiere jedes Wort, das mit reg oder exp beginnt, in Großbuchstaben |
sed '1,20 s/Johnson/White/g' file.txt |
Ersetzen Sie Johnson durch Weiß nur auf Zeilen zwischen 1 und 20 |
sed '1,20 !s/Johnson/White/g' file.txt |
Das obige umgekehrt (alle außer Zeilen 1-20) |
sed '/from/,/until/ { s/\<red\>/magenta/g; \ |
Ersetzen Sie nur zwischen „von“ und „bis“ |
sed '/ENDNOTES:/,$ { s/Schaff/Herzog/g; \ |
Ersetzen Sie nur ab dem Wort „ENDNOTES:“ bis EOF |
sed '/./{H;$!d;};x;/regex/!d' file.txt |
Drucke Absätze nur, wenn sie enthalten regex |
sed -e '/./{H;$!d;}' -e 'x;/RE1/!d;\ |
Drucke Absätze nur, wenn sie RE1 enthalten,
RE2 und RE3 |
sed ':a; /\$/N; s/\\n//; ta' file.txt |
Zwei Zeilen werden in der ersten endet mit einem Backslash |
sed 's/14"/fourteen inches/g' file.txt |
So können Sie doppelte Anführungszeichen verwenden können |
sed 's/\/some\/UNIX\/path/\/a\/new\ |
Arbeiten mit Unix Pfaden |
sed 's///g' file.txt |
Entfernen aller Zeichen von a bis g aus Datei.txt |
sed 's/\(.*\)foo/bar/' file.txt |
Ersetzen nur die letzte Übereinstimmung von foo mit bar |
sed '1!G;h;$!d' |
Ein Tac-Ersatz |
sed '/\n/!G;s/\(.\)\(.*\n\)/&\ |
Ein rev-Ersatz |
sed 10q file.txt |
Ein Kopfersatz |
sed -e :a -e '$q;N;11,$D;ba' \ |
Ein Heckersatz |
sed '$!N; /^\(.*\)\n$/!P; D' \ |
Ein uniq-Ersatz |
sed '$!N; s/^\(.*\)\n$//;\ |
Das Gegenteil (oder uniq -d äquivalent) |
sed '$!N;$!D' file.txt |
Äquivalent zu tail -n 2 |
sed -n '$p' file.txt |
… tail -n 1 (oder tail -1) |
sed '/regexp/!d' file.txt |
grep-Äquivalent |
sed -n '/regexp/{g;1!p;};h' file.txt |
Drucke die Zeile vor der, die mit regexp übereinstimmt, aber nicht die, die den regexp enthält |
sed -n '/regexp/{n;p;}' file.txt |
Drucke die Zeile nach derjenigen, die mit dem regexp, aber
nicht die, die den regexp enthält |
sed '/pattern/d' file.txt |
Lösche Zeilen, die dem Muster entsprechen |
sed '/./!d' file.txt |
Lösche alle Leerzeilen aus einer Datei |
sed '/^$/N;/\n$/N;//D' file.txt |
Löschen Sie alle aufeinanderfolgenden Leerzeilen Ausgenommen die ersten beiden |
sed -n '/^$/{p;h;};/./{x;/./p;}'\ |
Löschen Sie die letzte Zeile eines jeden Absatzes |
sed 's/.\x08//g' file |
Entfernen nroff-Überstriche |
sed '/^$/q' |
Mail-Kopfzeile holen |
sed '1,/^$/d' |
Mailkörper holen |
sed '/^Subject: */!d; s///;q' |
Mail-Betreff abrufen |
sed 's/^/> /' |
Mail-Nachricht zitieren durch Einfügen eines „> “ vor jeder Zeile |
sed 's/^> //' |
Das Gegenteil (nicht zitierte Mailnachricht) |
sed -e :a -e 's/<*>//g;/</N;//ba' |
Entfernen der HTML-Tags |
sed '/./{H;d;};x;s/\n/={NL}=/g'\ |
Absätze der Datei sortieren.txt alphabetisch sortieren |
sed 's@/usr/bin@&/local@g' path.txt |
Ersetzen Sie /usr/bin durch /usr/bin/local in Pfad.txt |
sed 's@^.*$@<<<&>>>@g' path.txt |
Versuchen Sie es und sehen Sie 🙂 |
sed 's/\(\/*\).*//g' path.txt |
Gebotener Pfad.txt enthält $PATH, wird dies nur den ersten Pfad in jeder Zeile ausgeben |
sed 's/\(*\).*//' /etc/passwd |
Ersatz vonawk – zeigt nur die Benutzer aus der passwd-Datei |
echo "Welcome To The Geek Stuff" | sed \ |
Selbst-erklärend |
sed -e '/^$/,/^END/s/hills/\ |
Tausche ‚Hügel‘ gegen ‚Berge‘, aber nur bei Blöcken von Text, der mit einer Leerzeile beginnt und mit einer Zeile endet, die mit den drei Zeichen ‚END‘ beginnt, inklusive |
sed -e '/^#/d' /etc/services | more |
Ansicht der Service-Datei ohne die kommentierten Zeilen |
sed '$s@\(*\):\(*\):\(*\ |
Umgekehrte Reihenfolge der Elemente in der letzten Zeile von path.txt |
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}'\ |
Drucken Sie 1 Zeile Kontext vor und nach der passenden Zeile, mit einer Zeilennummer, in der der Abgleich stattfindet |
sed '/regex/{x;p;x;}' file.txt |
Einfügen einer neuen Zeile über jeder mit regex übereinstimmenden Zeile |
sed '/AAA/!d; /BBB/!d; /CCC/!d' file.txt |
Match AAA, BBB und CCC in beliebiger Reihenfolge |
sed '/AAA.*BBB.*CCC/!d' file.txt |
Match AAA, BBB und CCC in dieser Reihenfolge |
sed -n '/^.\{65\}/p' file.txt |
Drucke Zeilen mit 65 Zeichen oder mehr |
sed -n '/^.\{65\}/!p' file.txt |
Drucke Zeilen mit 65 Zeichen lang oder kürzer |
sed '/regex/G' file.txt |
Leerzeile unter jeder Zeile einfügen |
sed '/regex/{x;p;x;G;}' file.txt |
Leerzeile oben und unten einfügen |
sed = file.txt | sed 'N;s/\n/\t/' |
Zeilenanzahl in file.txt |
sed -e :a -e 's/^.\{1,78\}$/\ |
Text rechtsbündig ausrichten |
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e \ |
Text zentriert ausrichten |
Abschluss
Das ist nur ein Teil dessen, was man über sed erzählen kann, aber diese Serie ist als praktischer Leitfaden gedacht, und wir hoffen, dass sie Ihnen hilft, die Macht der Unix-Werkzeuge zu entdecken und effizienter in Ihrer Arbeit zu werden.
das Gegenteil bewirkt. If you’re a vi(m) user, some of these things might look familiar. After all, these utilities, together with awk or C have their roots in the early days of Unix. We won’t insist anymore on the subject, as things will become simpler by reading examples, but what you should know is that there are various implementations of regexps: POSIX, POSIX Extended, Perl or various implementations of fuzzy regular expressions, guaranteed to give you a headache.
sed examples
Learning Linux sed command with examples | |
---|---|
Linux command syntax | Linux command description |
sed 's/Nick/John/g' report.txt |
Replace every occurrence of Nick with John in report.txt |
sed 's/Nick|nick/John/g' report.txt |
Replace every occurrence of Nick or nick with John. |
sed 's/^/ /' file.txt >file_new.txt |
Add 8 spaces to the left of a text for pretty printing. |
sed -n '/Of course/,/attention you \ |
Display only one paragraph, starting with „Of course“ and ending in „attention you pay“ |
sed -n 12,18p file.txt |
Show only lines 12-18 of file.txt |
sed 12,18d file.txt |
Show all of file.txt except for lines from 12 to 18 |
sed G file.txt |
Double-space file.txt |
sed -f script.sed file.txt |
Write all commands in script.sed and execute them |
sed '5!s/ham/cheese/' file.txt |
Replace ham with cheese in file.txt except in the 5th line |
sed '$d' file.txt |
Delete the last line |
sed '/\{3\}/p' file.txt |
Print only lines with three consecutive digits |
sed '/boom/!s/aaa/bb/' file.txt |
Unless boom is found replace aaa with bb |
sed '17,/disk/d' file.txt |
Delete all lines from line 17 to ‚disk‘ |
echo ONE TWO | sed "s/one/unos/I" |
Replaces one with unos in a case-insensitive manner, so it will print „unos TWO“ |
sed 'G;G' file.txt |
Triple-space a file |
sed 's/.$//' file.txt |
A way to replace dos2unix 🙂 |
sed 's/^*//' file.txt |
Delete all spaces in front of every line of file.txt |
sed 's/*$//' file.txt |
Delete all spaces at the end of every line of file.txt |
sed 's/^*//;s/*$//' file.txt |
Delete all spaces in front and at the end of every line of file.txt |
sed 's/foo/bar/' file.txt |
Replace foo with bar only for the first instance in a line. |
sed 's/foo/bar/4' file.txt |
Replace foo with bar only for the 4th instance in a line. |
sed 's/foo/bar/g' file.txt |
Replace foo with bar for all instances in a line. |
sed '/baz/s/foo/bar/g' file.txt |
Only if line contains baz, substitute foo with bar |
sed '/./,/^$/!d' file.txt |
Delete all consecutive blank lines except for EOF |
sed '/^$/N;/\n$/D' file.txt |
Delete all consecutive blank lines, but allows only top blank line |
sed '/./,$!d' file.txt |
Delete all leading blank lines |
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' \ |
Delete all trailing blank lines |
sed -e :a -e '/\$/N; s/\\n//; ta' \ |
If a file ends in a backslash, join it with the next (useful for shell scripts) |
sed '/regex/,+5/expr/' |
Match regex plus the next 5 lines |
sed '1~3d' file.txt |
Delete every third line, starting with the first |
sed -n '2~5p' file.txt |
Print every 5th line starting with the second |
sed 's/ick/John/g' report.txt |
Another way to write some example above. Can you guess which one? |
sed -n '/RE/{p;q;}' file.txt |
Print only the first match of RE (regular expression) |
sed '0,/RE/{//d;}' file.txt |
Delete only the first match |
sed '0,/RE/s//to_that/' file.txt |
Change only the first match |
sed 's/^*,/9999,/' file.csv |
Change first field to 9999 in a CSV file |
s/^ *\(.*\) *$/||/; |
sed script to convert CSV file to bar-separated (works only on some types of CSV, with embedded „s and commas) |
sed ':a;s/\(^\|\)\(\+\)\ |
Change numbers from file.txt from 1234.56 form to 1.234.56 |
sed -r "s/\<(reg|exp)+/\U&/g" |
Convert any word starting with reg or exp to uppercase |
sed '1,20 s/Johnson/White/g' file.txt |
Do replacement of Johnson with White only on lines between 1 and 20 |
sed '1,20 !s/Johnson/White/g' file.txt |
The above reversed (match all except lines 1-20) |
sed '/from/,/until/ { s/\<red\>/magenta/g; \ |
Replace only between „from“ and „until“ |
sed '/ENDNOTES:/,$ { s/Schaff/Herzog/g; \ |
Replace only from the word „ENDNOTES:“ until EOF |
sed '/./{H;$!d;};x;/regex/!d' file.txt |
Print paragraphs only if they contain regex |
sed -e '/./{H;$!d;}' -e 'x;/RE1/!d;\ |
Print paragraphs only if they contain RE1, RE2 and RE3 |
sed ':a; /\$/N; s/\\n//; ta' file.txt |
Join two lines in the first ends in a backslash |
sed 's/14"/fourteen inches/g' file.txt |
This is how you can use double quotes |
sed 's/\/some\/UNIX\/path/\/a\/new\ |
Working with Unix paths |
sed 's///g' file.txt |
Remove all characters from a to g from file.txt |
sed 's/\(.*\)foo/bar/' file.txt |
Replace only the last match of foo with bar |
sed '1!G;h;$!d' |
A tac replacement |
sed '/\n/!G;s/\(.\)\(.*\n\)/&\ |
A rev replacement |
sed 10q file.txt |
A head replacement |
sed -e :a -e '$q;N;11,$D;ba' \ |
A tail replacement |
sed '$!N; /^\(.*\)\n$/!P; D' \ |
A uniq replacement |
sed '$!N; s/^\(.*\)\n$//;\ |
The opposite (or uniq -d equivalent) |
sed '$!N;$!D' file.txt |
Equivalent to tail -n 2 |
sed -n '$p' file.txt |
… tail -n 1 (or tail -1) |
sed '/regexp/!d' file.txt |
grep equivalent |
sed -n '/regexp/{g;1!p;};h' file.txt |
Print the line before the one matching regexp, but not the one containing the regexp |
sed -n '/regexp/{n;p;}' file.txt |
Print the line after the one matching the regexp, but
not the one containing the regexp |
sed '/pattern/d' file.txt |
Delete lines matching pattern |
sed '/./!d' file.txt |
Delete all blank lines from a file |
sed '/^$/N;/\n$/N;//D' file.txt |
Delete all consecutive blank lines except for the first two |
sed -n '/^$/{p;h;};/./{x;/./p;}'\ |
Delete the last line of each paragraph |
sed 's/.\x08//g' file |
Remove nroff overstrikes |
sed '/^$/q' |
Get mail header |
sed '1,/^$/d' |
Get mail body |
sed '/^Subject: */!d; s///;q' |
Get mail subject |
sed 's/^/> /' |
Quote mail message by inserting a „> “ in front of every line |
sed 's/^> //' |
The opposite (unquote mail message) |
sed -e :a -e 's/<*>//g;/</N;//ba' |
Remove HTML tags |
sed '/./{H;d;};x;s/\n/={NL}=/g'\ |
Sort paragraphs of file.txt alphabetically |
sed 's@/usr/bin@&/local@g' path.txt |
Replace /usr/bin with /usr/bin/local in path.txt |
sed 's@^.*$@<<<&>>>@g' path.txt |
Try it and see 🙂 |
sed 's/\(\/*\).*//g' path.txt |
Provided path.txt contains $PATH, this will echo only the first path on each line |
sed 's/\(*\).*//' /etc/passwd |
awk replacement – displays only the users from the passwd file |
echo "Welcome To The Geek Stuff" | sed \ |
Self-explanatory |
sed -e '/^$/,/^END/s/hills/\ |
Swap ‚hills‘ for ‚mountains‘, but only on blocks of text beginning with a blank line, and ending with a line beginning with the three characters ‚END‘, inclusive |
sed -e '/^#/d' /etc/services | more |
View the services file without the commented lines |
sed '$s@\(*\):\(*\):\(*\ |
Reverse order of items in the last line of path.txt |
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}'\ |
Print 1 line of context before and after the line matching, with a line number where the matching occurs |
sed '/regex/{x;p;x;}' file.txt |
Insert a new line above every line matching regex |
sed '/AAA/!d; /BBB/!d; /CCC/!d' file.txt |
Match AAA, BBB and CCC in any order |
sed '/AAA.*BBB.*CCC/!d' file.txt |
Match AAA, BBB and CCC in that order |
sed -n '/^.\{65\}/p' file.txt |
Print lines 65 chars long or more |
sed -n '/^.\{65\}/!p' file.txt |
Print lines 65 chars long or less |
sed '/regex/G' file.txt |
Insert blank line below every line |
sed '/regex/{x;p;x;G;}' file.txt |
Insert blank line above and below |
sed = file.txt | sed 'N;s/\n/\t/' |
Number lines in file.txt |
sed -e :a -e 's/^.\{1,78\}$/\ |
Align text flush right |
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e \ |
Align text center |
Conclusion
This is only a part of what can be told about sed, but this series is meant as a practical guide, so we hope it helps you discover the power of Unix tools and become more efficient in your work.