Einführung
- 3737
- 388
- Marleen Weight
Willkommen zum zweiten Teil unserer Serie, einem Teil, der sich auf SED konzentriert, die GNU -Version. Wie Sie sehen werden, gibt es mehrere SED -Varianten, die für einige Plattformen verfügbar sind, aber wir werden uns auf Gnu SED -Versionen 4 konzentrieren 4.X. Viele von Ihnen haben bereits von SED gehört und es bereits verwendet, hauptsächlich als Substitutionsinstrument. Aber das ist nur ein Teil dessen, was SED tun kann, und wir werden unser Bestes tun, um Ihnen so viel wie möglich zu zeigen, was Sie damit machen können. Der Name steht für Stream Editor und hier kann „Stream“ eine Datei, eine Rohr 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, desto besser. Wir haben keinen Platz für ein vollständiges Tutorial für reguläre Ausdrücke, daher geben wir Ihnen nur eine Grundidee und viele SED -Beispiele. Es gibt viele Dokumente, die sich mit dem Thema befassen, und wir werden sogar einige Empfehlungen haben, wie Sie in einer Minute sehen werden.
Installation
Hier gibt es nicht viel zu erzählen, da Sie wahrscheinlich bereits SED installiert haben, da es in verschiedenen Systemskripten und in einem unschätzbaren Tool in der Lebensdauer eines Linux -Benutzers verwendet wird, der effizient sein möchte. Sie können testen, welche Version Sie durch Eingabe haben
$ sed -Verssion
Auf meinem System sagt mir dieser Befehl, ich habe Gnu sed 4.2.1 installiert sowie Links zur Startseite und andere nützliche Dinge. Das Paket heißt einfach "sed", unabhängig von der Verteilung, aber wenn Gentoo implizit Sed anbietet, glaube ich.
Konzepte
Bevor wir weiter gehen, ist es wichtig, dass es wichtig ist, darauf hinzuweisen Was Genau ist es, dass SED es tut, weil "Stream Editor" möglicherweise nicht zu viele Glocken klingelt. SED nimmt den Eingangstext an, führt die angegebenen Operationen in jeder Zeile (sofern nicht anders angegeben) und druckt den geänderten Text aus. Die angegebenen Operationen können angehängt, einfügen, löschen oder ersetzen. Dies ist nicht so einfach, wie es aussehen mag: Seien Sie vorgewarnt, dass es viele Optionen und Kombinationen gibt, die einen SED -Befehl ziemlich schwer zu verdauen machen können. Wenn Sie SED verwenden möchten, empfehlen wir Ihnen, die Grundlagen von Regexps zu lernen, und Sie können den Rest beim Gehen fangen. Bevor wir mit dem Tutorial beginnen, möchten wir Eric Pement und anderen für die Inspiration und für das, was er für alle getan hat, die lernen und SED verwenden möchten, danken möchten.
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 blind kopieren und zu kleben, die sie nicht wissen, die Bedeutung von. Wenn man verstehen möchte, was ein Regexp ist, ist das Schlüsselwort "passend". Oder noch besser, "Muster Matching". In einem Bericht für Ihre Personalabteilung haben Sie beispielsweise den Namen von Nick geschrieben, als Sie sich auf den Netzwerkarchitekt beziehen. Aber Nick ging weiter und John kam, um seinen Platz einzunehmen, also musst du das Wort Nick durch John ersetzen. Wenn die Datei als Bericht aufgerufen wird.txt, du könntest tun
$ cat Report.txt | sed 's/nick/John/g'> report_new.txt
Standardmäßig verwendet SED stdout, sodass Sie den Umleitungsoperator Ihrer Shell wie in unserem Beispiel unten verwenden möchten. Dies ist ein sehr einfaches Beispiel, aber wir haben einige Punkte illustriert: Wir stimmen mit dem Muster „Nick“ zusammen und ersetzen alle Fälle durch „John“. Beachten Sie, dass SED Fallempfindlichkeit ist. Seien Sie also vorsichtig und überprüfen Sie Ihre Ausgabedatei, um festzustellen, ob alle Substitutionen erstellt wurden. Das obige hätte auch so geschrieben werden können:
$ sed 's/nick/John/g' Bericht.txt> report_new.txt
Ok, aber wo sind die regulären Ausdrücke, fragen Sie? Nun, wir wollten zuerst Ihre Füße mit dem Konzept der Übereinstimmung nass machen und hier kommt der interessante Teil.
Wenn Sie sich nicht sicher sind, ob Sie versehentlich „Nick“ anstelle von „Nick“ geschrieben haben und auch damit mithalten möchten, könnten Sie Sed 's/Nick | Nick/John/G verwenden. Die vertikale Balken hat die gleiche Bedeutung, die Sie möglicherweise wissen, wenn Sie C verwendet haben, dh Ihr Ausdruck passt zu Nick oder Nick. Wie Sie sehen werden, kann das Rohr auch auf andere Weise verwendet werden, aber seine Bedeutung bleibt bleiben. Andere Operatoren, die häufig in Regexps verwendet werden, sind '?', die mit Null oder einer Instanz des vorhergehenden Elements übereinstimmen (Flavou?R entspricht dem Geschmack und Geschmack), '*' bedeutet Null oder mehr und '+' einem oder mehrerer Elemente entspricht. '^' entspricht dem Beginn der Zeichenfolge, während '$' das Gegenteil tut. Wenn Sie ein VI (M) -Nutzer sind, sehen einige dieser Dinge möglicherweise vertraut aus. Schließlich haben diese Versorgungsunternehmen zusammen mit awk oder c ihre Wurzeln in den frühen Tagen von Unix. Wir werden nicht mehr auf diesem Thema bestehen, da die Dinge durch das Lesen von Beispielen einfacher werden. Sie sollten jedoch wissen, dass es verschiedene Implementierungen von Regexps gibt: POSIX, POSIX Extended, Perl oder verschiedene Implementierungen von unscharfen regulären Ausdrücken, die garantiert garantiert sind Sie Kopfschmerzen.
SED Beispiele
Lernen von Linux SED Befehl mit Beispielen | |
---|---|
Linux -Befehlssyntax | Linux -Befehlsbeschreibung |
sed 's/nick/John/g' Bericht.txt | Ersetzen Sie jedes Ereignis von Nick durch John im Bericht.txt |
sed 's/nick | nick/John/g' Bericht.txt | Ersetzen Sie jedes Ereignis von Nick oder Nick durch John. |
sed 's/^//' Datei.txt> file_new.txt | Fügen Sie links von einem Text 8 Stellen für den hübschen Druck hinzu. |
sed -n '/natürlich/,/Aufmerksamkeit du \ | Zeigen Sie nur einen Absatz an, beginnend mit "natürlich" und enden in "Aufmerksamkeit, die Sie zahlen" |
sed -n 12,18p Datei.txt | Zeigen Sie nur Zeilen 12-18 der Datei an.txt |
SED 12,18D -Datei.txt | Zeigen Sie die gesamte Datei an.TXT mit Ausnahme von Zeilen von 12 bis 18 |
SED G -Datei.txt | Doppelraumdatei.txt |
SED -f -Skript.SED -Datei.txt | Schreiben Sie alle Befehle in das Skript.sed und ausführen |
sed '5!s/ham/käse/'Datei.txt | Ersetzen Sie Schinken durch Käse in der Akte.txt außer in der 5. Zeile |
sed '$ d' Datei.txt | Löschen Sie die letzte Zeile |
SED '/[0-9] \ 3 \/P' Datei.txt | Drucken Sie nur Zeilen mit drei aufeinanderfolgenden Ziffern |
sed '/boom/!S/AAA/BB/'Datei.txt | Es sei denn |
sed '17,/disk/d 'Datei.txt | Löschen Sie alle Zeilen von Zeile 17 bis 'Disk' ' |
Echo eins zwei | sed "s/eins/unos/i" " | Ersetzt einen durch unempfindliche Weise durch UnoS, So druckt es "Unos zwei" drucken |
sed 'g; g' Datei.txt | Triple-Space Eine Datei |
sed 's/.$ // 'Datei.txt | Eine Möglichkeit, dos2unix 🙂 zu ersetzen 🙂 |
sed 's/ ^[ ^t]*//' Datei.txt | Löschen Sie alle Räume vor jeder Dateizeile.txt |
sed 's/[ ^t]*$ //' Datei.txt | Löschen Sie alle Räume am Ende jeder Dateizeile.txt |
sed 's/ ^[ ^t]*//; s/[ ^]*$ //' Datei.txt | Löschen Sie alle Räume vor und am Ende jeder Zeile von Datei.txt |
sed 's/foo/bar/' Datei.txt | Ersetzen Sie Foo nur für die erste Instanz in einer Zeile durch die Bar. |
sed 's/foo/bar/4' Datei.txt | Ersetzen Sie Foo nur für die 4. Instanz in einer Zeile durch die Bar. |
sed 's/foo/bar/g' Datei.txt | Ersetzen Sie Foo für alle Fälle in einer Zeile durch Balken. |
sed '/baz/s/foo/bar/g' Datei.txt | Nur wenn die Linie BAZ enthält, ersetzen Sie Foo durch die Bar |
sed '/./,/^$//!D 'Datei.txt | Löschen Sie alle aufeinanderfolgenden leeren Linien mit Ausnahme von EOF |
sed '/^$/n;/\ n $/d' Datei.txt | Löschen Sie alle aufeinanderfolgenden leeren Zeilen, erlauben aber Nur obere leere Linie |
sed '/./, $!D 'Datei.txt | Löschen Sie alle führenden leeren Linien |
sed -e: a -e '/^\ n*$/$ d; n;;/\ n $/ba' \ | Löschen Sie alle nachlaufenden leeren Linien |
sed -e: a -e '/\\ $/n; s/\\\ n //; ta '\ | Wenn eine Datei in einem Backslash endet, schließen Sie sie mit der nächsten an (nützlich für Shell -Skripte) |
sed '/regex/,+5/expr/' | Übereinstimmen Regex plus die nächsten 5 Zeilen |
sed '1 ~ 3d' Datei.txt | Löschen Sie jede dritte Zeile, beginnend mit der ersten |
sed -n '2 ~ 5p' Datei.txt | Drucken Sie jede 5. Zeile, beginnend mit der zweiten |
sed 's/[nn] ick/John/g' Bericht.txt | Eine andere Möglichkeit, einige Beispiele oben zu schreiben. Kannst du erraten, welches? |
sed -n '/re/p; q;' Datei.txt | Drucken Sie nur das erste Match von Re (regulärer Ausdruck) |
sed '0,/re/// d;' Datei.txt | Nur das erste Spiel löschen |
sed '0,/re/s // to_that/' Datei.txt | Ändern Sie nur das erste Spiel |
sed 's/^[^,]*,/9999,/' Datei.CSV | Ändern Sie das erste Feld in einer CSV -Datei auf 9999 |
s/^ *\ (.*[^] \) *$/| \ 1 |/; | SED-Skrip (funktioniert nur an einigen Arten von CSV, mit eingebetteten "s und commas) |
sed ': a; s/\ (^\ | [^0-9.] \) \ ([0-9] \+\) \\ | Ändern Sie die Nummern aus der Datei.txt aus 1234.56 Form bis 1.234.56 |
sed -r "s/\<(reg|exp)[a-z]+/\U&/g" | Konvertieren Sie jedes Wort, das mit Reg oder Exp in Großbuchstaben beginnt |
SED '1,20 s/Johnson/White/G' Datei.txt | Ersetzen Sie Johnson nur durch Weiß nur auf Linien zwischen 1 und 20 |
sed '1,20 !S/Johnson/White/G 'Datei.txt | Die obigen Umkehrung (übereinstimmen alle außer Zeilen 1-20) |
sed '/from/,/bis/s/\/magenta/g; \ | Ersetzen Sie nur zwischen "von" und "bis" |
sed '/endnotes:/, $ s/schaff/herzog/g; \ | Ersetzen Sie nur durch das Wort „Endnoten“: bis eof |
sed '/./H; $!d;; x;/regex/!D 'Datei.txt | Absätze nur dann drucken, wenn sie Regex enthalten |
sed -e '//./H; $!d; '-e' x;/re1/!D;\ | Absätze nur dann drucken, wenn sie RE1 enthalten, Re2 und Re3 |
sed ': a; /\\ $/n; s/\\\ n //; ta 'Datei.txt | Verbinden Sie zwei Zeilen in den ersten Enden in einem Backslash |
sed 's/14 "/vierzehn Zoll/g' Datei.txt | So können Sie Doppelzitate verwenden |
sed 's/\/einige \/unix \/path/\/a \/new \\ | Arbeiten mit Unix -Pfaden |
sed 's/[a-g] // g' Datei.txt | Entfernen Sie alle Zeichen von A bis G von der Datei.txt |
sed 's/\ (.*\) foo/\ 1Bar/'Datei.txt | Ersetzen Sie nur das letzte Match von Foo durch die Bar |
sed '1!G; H; $!D' | Ein TAC -Ersatz |
sed '/\ n/!G; s/\ (.\) \ (.*\ n \)/& \ 2 \ 1 \ \ | Ein Rev. Ersatz |
SED 10Q -Datei.txt | Ein Kopfersatz |
sed -e: a -e '$ q; n; 11, $ d; ba' \ | Ein Schwanzersatz |
sed '$!N; /^\ (.*\) \ n \ 1 $/!P; D' \ | Ein Uniq -Ersatz |
sed '$!N; s/^\ (.*\) \ n \ 1 $/\ 1/; \ | Das Gegenteil (oder uniq -däquivalent) |
sed '$!N; $!D 'Datei.txt | Äquivalent zu schwanz -n 2 |
sed -n '$ p' Datei.txt | … Schwanz -n 1 (oder Schwanz -1) |
sed '/regexp/!D 'Datei.txt | Grep -Äquivalent |
sed -n '/regexp/g; 1!p;; h 'Datei.txt | Drucken Sie die Zeile vor der einen passenden Regexp, aber aber nicht derjenige, der den Regexp enthält |
sed -n '/regexp/n; p;' Datei.txt | Drucken Sie die Zeile nach dem, das dem Regexp entspricht, aber nicht derjenige, der den Regexp enthält |
sed '/muster/d' Datei.txt | Löschen von Zeilen Matching -Muster |
sed '/./!D 'Datei.txt | Löschen Sie alle leeren Zeilen aus einer Datei |
sed '/^$/n;/\ n $/n; // d' Datei.txt | Löschen Sie alle aufeinanderfolgenden leeren Zeilen außer den ersten beiden |
sed -n '/^$/p; h;;////./X;/./P;'\ | Löschen Sie die letzte Zeile jedes Absatzes |
sed 's/.\ x08 // g 'Datei | NROFF -Überletzungen entfernen |
sed '/^$/q' | E -Mail -Header bekommen |
sed '1,/^$/d' | Holen Sie sich Postkörper |
sed '/^Betreff: */!D; s ///; q ' | E -Mail -Betreff erhalten |
sed 's/^/>/' | Mail -Mail -Nachricht, indem Sie a einfügen a ">" Vor jeder Zeile |
sed 's/^> //' | Das Gegenteil (nicht quote Mail -Nachricht) |
sed -e: a -e 's/]*> // g;/ | Entfernen Sie HTML -Tags |
sed '/./H; d;; x; s/\ n/= nl =/g '\ | Sortieren Sie die Dateiabschnitte.Txt alphabetisch |
sed 's@/usr/bin@&/local@g' Pfad.txt | Ersetzen Sie/usr/bin durch/usr/bin/local im Pfad.txt |
sed 's@^.*$@<<>> @g 'Pfad.txt | Versuchen Sie es und sehen Sie 🙂 |
sed 's/\ (\/[^:]*\).*/\ 1/g 'Pfad.txt | Bereitgestelltem Weg.txt enthält $ path, das wird Echo nur den ersten Weg in jeder Zeile |
sed 's/\ ([^:]*\).*/\ 1/'/etc/passwd | awk Ersatz - Zeigt nur die Benutzer an aus der Passwd -Datei |
echo "Willkommen zum Geek -Zeug" | sed \ | Selbsterklärend |
sed -e '/^$/,/^end/s/hills/\ | Tauschen Sie 'Hügel' für 'Berge', aber nur auf Blöcken des Textes beginnen mit einer leeren Linie und enden mit einem Zeilenbeginn mit den drei Charakteren 'Ende' inklusive |
sed -e '/^#/d'/etc/dienste | mehr | Zeigen Sie die Dienstedatei ohne die kommentierten Zeilen an |
sed '$ s@\ ([^:]*\): \ ([^:]*\): \ ([^:]*\ | Umgekehrte Reihenfolge der Elemente in der letzten Pfadlinie.txt |
sed -n -e '/regexp/=; x; 1; 1!p; g; $!N; p; d; '\ | Drucken Sie 1 Kontextlinie vor und nach der Linienübereinstimmung, mit einer Zeilennummer, in der die Übereinstimmung auftritt |
sed '/regex/x; p; x;' Datei.txt | Fügen Sie eine neue Zeile über jeder Zeilenanpassungsregex ein |
sed '/aaa/!D; /BBB/!D; /Ccc/!D 'Datei.txt | Match AAA, BBB und CCC in beliebiger Reihenfolge |
sed '/aaa.*BBB.*CCC/!D 'Datei.txt | Match AAA, BBB und CCC in dieser Reihenfolge |
sed -n '/^.\ 65 \/p 'Datei.txt | Drucken Linien 65 Zeichen lang oder mehr |
sed -n '/^.\ 65 \/!P 'Datei.txt | Druckleitungen 65 Zeichen lang oder weniger |
sed '/regex/g' Datei.txt | Legen Sie die leere Zeile unter jeder Zeile ein |
sed '/regex/x; p; x; g;' Datei.txt | Legen Sie die leere Zeile oben und unten ein |
SED = Datei.txt | sed 'n; s/\ n/\ t/' | Zahlenzeilen in der Datei.txt |
sed -e: a -e 's/^.\ 1,78 \ $/\ | Texte ordnen richtig ausgerichtet |
sed -e: a -e 's/^.\ 1,77 \ $/ &/; ta '-e \ | Ausrichtung des Textzentrums |
Abschluss
Dies ist nur ein Teil dessen, was über SED erzählt werden kann, aber diese Serie ist als praktischer Leitfaden gemeint. Wir hoffen, dass Sie die Kraft von Unix -Tools entdecken und in Ihrer Arbeit effizienter werden.
Verwandte Linux -Tutorials:
- Dinge zu installieren auf Ubuntu 20.04
- Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
- Eine Einführung in Linux -Automatisierung, Tools und Techniken
- Mint 20: Besser als Ubuntu und Microsoft Windows?
- Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
- Dinge zu installieren auf Ubuntu 22.04
- Hören Sie sich Ihren Lieblings -Radiosender mit einem einzigen Befehl an…
- Hung Linux System? Wie man zur Befehlszeile entkommt und…
- Ubuntu 20.04 Leitfaden
- Mastering -Bash -Skriptschleifen beherrschen