Einführung

Einführung

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 \
Myfile bezahlen/p 'myfile

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' \
Datei.txt
Löschen Sie alle nachlaufenden leeren Linien
sed -e: a -e '/\\ $/n; s/\\\ n //; ta '\
Datei.txt

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 |/;
s/" *, */" |/g;
: Schleife
s/| *\ ([^", |] [^, |] *\) *, */| \ 1 |/g;
s/| *, */| \ 1 |/g;
t Loop
s/ *|/|/g;
s/| */|/g;
s/^| \ (.*\) | $/\ 1/;

SED-Skrip

(funktioniert nur an einigen Arten von CSV,

mit eingebetteten "s und commas)

sed ': a; s/\ (^\ | [^0-9.] \) \ ([0-9] \+\) \\
([0-9] \ 3 \ \)/\ 1 \ 2, \ 3/g; ta 'Datei.txt
Ä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; \
s/\/cyan/g; ' Datei.txt
Ersetzen Sie nur zwischen "von" und "bis"
sed '/endnotes:/, $ s/schaff/herzog/g; \
s/kraft/eBbing/g; ' Datei.txt
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;\
/Re2/!d;/re3/!D 'Datei.txt

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 \\
/Pfad/g 'Datei.txt

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 \ \
/; // d; s/.// '
Ein Rev. Ersatz
SED 10Q -Datei.txt
Ein Kopfersatz
sed -e: a -e '$ q; n; 11, $ d; ba' \
Datei.txt
Ein Schwanzersatz
sed '$!N; /^\ (.*\) \ n \ 1 $/!P; D' \
Datei.txt
Ein Uniq -Ersatz
sed '$!N; s/^\ (.*\) \ n \ 1 $/\ 1/; \
T; D 'Datei.txt
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;'\
Datei.txt
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 '\
Datei.txt | sortieren \
| sed '1s/= nl = //; s/= nl =/\ n/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 \
's/\ (\ b [a-z] \)/\ (\ 1 \)/g'
(W) Elcome (t) o (t) er (g) eek (s) tuff
Selbsterklärend
sed -e '/^$/,/^end/s/hills/\
Berge/G 'Datei.txt

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@\ ([^:]*\): \ ([^:]*\): \ ([^:]*\
\)@\ 3: \ 2: \ 1@G 'Pfad.txt
Umgekehrte Reihenfolge der Elemente in der letzten Pfadlinie.txt
sed -n -e '/regexp/=; x; 1; 1!p; g; $!N; p; d; '\
-E H -Datei.txt

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 \ $/\
&/; ta 'Datei.txt
Texte ordnen richtig ausgerichtet
sed -e: a -e 's/^.\ 1,77 \ $/ &/; ta '-e \
's/\ ( *\) \ 1/\ 1/' Datei.txt
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