Ich habe in sed
letzter Zeit viel gesehen und finde es ein ziemlich verwirrender Befehl. Die Hilfeseiten waren nicht besonders hilfreich, aber ich weiß, dass sie zum Parsen der Ausgabe anderer Befehle verwendet werden können.
Was genau ist sed
und wofür wird es verwendet? Ich bin auf der Suche nach einer umfassenden Antwort, die beschreibt, was sed
ist, wofür es häufig verwendet wird und einige grundlegende Beispiele / Syntax.
command-line
sed
Seth
quelle
quelle
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
hat viel mehr alsman sed
. Dann/usr/share/doc/sed
ist da drinsedfaq.txt.gz
.Antworten:
Im Grundgebrauch wird es zum Suchen und Ersetzen durch Zeichenfolgen verwendet.
echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'
kehrt zurück
"The quick brown fox jumps over the lazy cat"
Sed glänzt wirklich, wenn damit reguläre Ausdrücke verwendet werden.
Vielleicht möchten Sie einen Blick auf, diesen Artikel über
sed
seine recht umfassend.quelle
Definitionen
Unix System V: eine praktische Anleitung , Buch von Mark Sobell:
Manpage für sed (GNU sed) 4.2.2:
Meine informelle Definition:
Sed
(kurz für Stream Editor ) ist ein Textverarbeitungsprogramm, das zu der Zeit entwickelt wurde, als Text zeilenweise verarbeitet wurde, aber eines der leistungsstärksten Unix / Linux-Dienstprogramme bleibt. Gleichzeitig ist es eine Form der Skriptsprache, die speziell für die Textverarbeitung entwickelt wurde.Verwendet
Wird, wie in den Definitionen angegeben,
sed
für die Stapelverarbeitung von Textzeilen, Textdateien und weitergeleiteten Textströmen verwendet. Am häufigsten wird es zum Ersetzen und Löschen von Text verwendet:Es kann jedoch auch verwendet werden, um das Verhalten anderer Befehle nachzuahmen.
dmesg | head -n 3
(erste 3 Zeilen drucken), können wir tundmesg | sed -n 1,3p
.dmesg | grep 'wlan0'
(nach einer Zeichenfolge suchen), können wir tundmesg | sed -n '/wlan0/p'
Der große Vorteil
sed
gegenüber anderen Dienstprogrammen für die Textverarbeitung ist das-i
Flag, das bedeutet, dass wir den bearbeiteten Text nicht nur auf dem Bildschirm ausgeben, sondern ihn auch in der Originaldatei speichern können.awk
Aromen haben dagegen nur eine solche Funktion in derGNU awk
Version.sed
Kann Eingaben über die Befehlszeile mit mehreren durch Semikolon (;
) getrennten Mustern oder aus einer nach-f
flag angegebenen Skriptdatei annehmen , zcat someTextfile.txt | sed -f myScript.sed
Sed Anwendungen und Beispiele
Sed Einzeiler
Textbearbeitung mit sed, Linux Journal
sed - 20 Beispiele zum Entfernen / Löschen von Zeichen aus einer Datei
Sed Script - Namen umkehren
Wie kann ich eine Zeichenfolge in einer oder mehreren Dateien ersetzen?
Wie kann ich jede zweite Zeile einer Datei löschen?
quelle
sed
ist ein leistungsfähiger Befehl, mit dem Sie Dinge erstellen können (Entfernen von Zeilen, Ersetzen von Zeichenfolgen, Filtern von Zeichenfolgen usw.).Ich könnte Ihnen eine Liste von Verwendungszwecken mit Argumenten geben, aber das Internet ist voll davon. Das Suchen
sed usage by examples
bringt mir viele Ergebnisse, das Süße: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/quelle
Diese Antwort ist in Bearbeitung. Es fehlen weitere Beispiele zum Befehl susbstitute
Was ist
sed
?sed
= Stream-EditorDie Beschreibung auf der Handbuchseite für GNU
sed
4.2.2-Berichte:Die Beschreibung auf der GNU-
sed
Seite unter gnu.org berichtet:Wofür wird es
sed
angewendet?Es kann verwendet werden, um komplexe Änderungen an Datenströmen durchzuführen (normalerweise Text, aber es kann auch verwendet werden, um Binärdaten zu ändern).
Zu den häufigsten Anwendungsfällen zählen:
Dies sind die Anwendungsfälle, die in dieser Antwort behandelt werden.
Verwendung
sed
Liest die Eingabe aus einer im Dateisystem gespeicherten Datei, wenn während des Aufrufs in den Befehlszeilenargumenten ein Dateiname angegeben wird oderstdin
wenn kein Dateiname angegeben wird.Minimaler Aufruf mit einer im Dateisystem gespeicherten Datei:
Minimaler Aufruf mit
stdin
:Hallo Welt!
sed
Standardmäßig wird die Eingabedatei zeilenweise gelesen. es liest eine Zeile, entfernt die nachgestellte Zeile und fügt die verarbeitete Zeile in einen "Musterraum" ein; Schließlich werden die aufgeführten Befehle für den aktuellen Inhalt des Musterbereichs ausgeführt und eine neue Zeile aus der Eingabedatei gelesen.Wenn kein Befehl angegeben ist oder wenn ein
p
oder eind
Befehl angegeben ist *,sed
wird immer der aktuelle Inhalt des Musterbereichs gedruckt, gefolgt von einer neuen Zeile bei jeder Iteration, unabhängig davon:Um dies zu verhindern, kann man
sed
zusammen mit dem-n
Schalter aufrufen :* Nur für die Rede
p
,d
unds
Befehle, die die Befehle in dieser Antwort abgedeckt sind.Auswahl der Linien
sed
kann die gesamte Eingabedatei oder nur ausgewählte Zeilen der Eingabedatei verarbeiten; Die Auswahl der Zeilen der zu verarbeitenden Eingabedatei erfolgt durch Angabe von "Adressen". Eine Adresse kann (unter anderem) entweder eine Zeilennummer oder ein Muster sein. Zeilenbereiche können durch Angabe von Adressbereichen ausgewählt werden.Mögliche Kombinationen von Adressen sind:
<N>
(Wo<N>
ist eine Zahl?): Der folgende Befehl / die folgenden Befehle werden nur für die Zeilennummer ausgeführt<N>
.<N>,<M>
(wobei<N>
und<M>
zwei Zahlen sind,<N>
><M>
): der folgende Befehl / die folgenden Befehle werden in Zeilen ausgeführt, die von Zeilennummer<N>
bis<M>
einschließlich Zeilennummer reichen ;/<pattern>/
(wobei<pattern>
ein basischer oder erweitern regulärer Ausdruck): Die folgenden Befehl / Befehle werden nur auf den Leitungen durchgeführt werden , das ein Auftreten<pattern>
;/<pattern1>/,/<pattern2>/
(wobei<pattern1>
und<pattern2>
sind einfach oder regulären Ausdrücken erweitert): die folgenden Befehls / Befehle auf den Leitungen durchgeführt werden , die von der ersten Zeile ein Auftreten enthält<pattern1>
in der nächsten Zeile ein Auftreten enthält<pattern2>
geordneten, mehrfach im Fall von mehreren<pattern1>
-<pattern2>
Vorkommen;<N>,/pattern/
(wobei<N>
es sich um eine Zahl und<pattern>
einen einfachen oder erweiterten regulären Ausdruck handelt): Der folgende Befehl / die folgenden Befehle werden in Zeilen ausgeführt, die von der Zeilennummer<N>
bis zur ersten Zeile mit dem Vorkommen von<pattern>
;/pattern/,<N>
(wobei<pattern>
es sich um einen einfachen oder erweiterten regulären Ausdruck und<N>
eine Zahl handelt): Der folgende Befehl / die folgenden Befehle werden in Zeilen ausgeführt, die von der ersten Zeile mit einem Vorkommen von<pattern>
bis zur Zeilennummer reichen<N>
.Die Auswahl zum Drucken, Löschen oder Ersetzen von Zeilenbereichen umfasst immer die Zeilen, die mit den angegebenen Adressen übereinstimmen. Darüber hinaus ist die Auswahl, die zum Drucken, Löschen oder Ersetzen von Zeilenbereichen mithilfe von Mustern ausgeführt wird, träge und global (dh, jeder betroffene Bereich ist immer so klein wie möglich, und mehrere Bereiche sind betroffen).
Wenn Sie Zeilenbereiche drucken oder nur Zeilen drucken, für die eine Substitution durchgeführt wurde, müssen Sie diese Option
sed
zusammen mit dem-n
Schalter aufrufen , um zu verhindern, dass Zeilen, die mit dem Kriterium übereinstimmen, zweimal gedruckt werden (dies geschieht nur, wenn Zeilenbereiche gedruckt werden) um zu verhindern, dass Zeilen nicht mit dem zu druckenden Kriterium übereinstimmen.Nach einer Auswahl der zu verarbeitenden Zeilen muss ein Befehl oder mehrere durch Semikolons getrennte Befehle in geschweiften Klammern angegeben werden.
Befehle: Drucken, Löschen
Die Befehle zum Drucken oder Löschen einer Auswahl lauten wie folgt:
p
: druckt Zeilen, die mit der angegebenen Adresse / dem angegebenen Adressbereich übereinstimmen;d
: löscht Zeilen, die mit der angegebenen Adresse / dem angegebenen Adressbereich übereinstimmen;Wenn einem dieser Befehle keine Adresse / Auswahl vorangestellt ist, wird der Befehl global ausgeführt, dh in jeder Zeile der Eingabedatei.
Beispiele: Drucken, Löschen
Zeilen mit numerischen Adressen drucken / löschen:
Beispieldatei:
<N>
:<N>
:<N>
bis<M>
inklusive:<N>
bis<M>
inklusive:Zeilen drucken / löschen, Muster festlegen:
Beispieldatei:
<pattern>
:<pattern>
:<pattern1>
zur Zeilenübereinstimmung drucken,<pattern2>
einschließlich:<pattern1>
bis<pattern2>
einschließlich der Zeilenübereinstimmung:Befehl: Ersatz
Der Befehl zum Ersetzen einer Auswahl lautet:
s
: Ersetzt Zeilen, die mit der angegebenen Adresse / dem angegebenen Adressbereich übereinstimmen.Wenn diesem Befehl keine Adresse / Auswahl vorangestellt ist, wird der Befehl global ausgeführt, dh in jeder Zeile der Eingabedatei.
Die Syntax des
s
Befehls lautet:Schrägstriche sind "Trennzeichen". sie dienen dazu , die zu begrenzen
<pattern>
,<replacement_string>
und<pattern_flags>
Abschnitte;Das Trennzeichen ist immer das Zeichen, das unmittelbar auf den
s
Befehl folgt . Es kann auf ein beliebiges anderes Zeichen gesetzt werden, zum Beispiel|
:<pattern>
ist ein einfacher oder erweiterter regulärer Ausdruck;<replacement_string>
ist ein fester String, dersed
-spezifische Sequenzen mit einer speziellen Bedeutung enthalten kann;<pattern_flags>
ist eine Liste von Flags, die das Verhalten von ändern<pattern>
.Häufigste
sed
-spezifische Sequenzen mit einer besonderen Bedeutung:&
: Rückverweis durch die Zeichenfolge ersetzt, die mit übereinstimmt<pattern>
;\<N>
(wo<N>
ist eine Zahl): Rückverweis ersetzt durch die in<N>
erfasste Gruppe<pattern>
;Häufigste Flaggen:
g
: Erzwingt<pattern>
eine globale Übereinstimmung, dh mehrere Male in jeder Zeile.i
: zwingt<pattern>
zu einer Übereinstimmung ohne Berücksichtigung der Groß- / Kleinschreibung;p
: druckt Zeilen, für die eine Ersetzung erneut durchgeführt wurde (nützlich, wenn der Aufruf des-n
Schalters verwendet wirdsed
, um nur die Zeilen zu drucken, für die eine Ersetzung durchgeführt wurde);Beispiele: Ersatz
Beispieldatei:
<pattern>
mit<replacement_string>
in jeder Zeile:<pattern>
durch<replacement_string>
in jeder Zeile ersetzen :<pattern1>
und alle Vorkommen von<pattern2>
mit ersetzen<replacement_string>
:<pattern1>
und alle Vorkommen von<pattern2>
mit ersetzen<replacement_string>
:quelle