Einführung | Ein weiterer nützlicher Befehl für Linux Foundation Certified System Administrators (LFCS) ist „sed“, was ursprünglich für „Streaming Editor“ stand. |
Der Befehl „sed“ ist ein Editor, der Dateien als Streams bearbeiten kann. Der Weg, eine Datei zu streamen, besteht darin, sie von einem anderen Befehl weiterzuleiten (> oder |) oder sie direkt in „sed“ zu laden.
Dieser Befehl funktioniert genauso wie andere Editoren, außer dass die Dateien nicht angezeigt werden und eine visuelle Bearbeitung nicht zulässig ist. Befehle werden an „sed“ übergeben, um den Stream zu manipulieren.
Es gibt fünf grundlegende Dinge, die Sie mit „sed“ tun können. Natürlich ist „sed“ sehr leistungsstark und verfügt über weitere erweiterte Funktionen, aber Sie müssen sich nur auf fünf grundlegende Dinge konzentrieren. Die fünf Funktionstypen sind wie folgt:
Suchen
Ersetzen Sie
Löschen
hinzufügen
verändern/transformieren
Bevor wir uns mit den Befehlsparametern befassen, müssen wir uns die grundlegende Syntax ansehen.
Die Syntax des Befehls „sed“ lautet:
sed [选项] 命令 [要编辑的文件]
Diese „Optionen“ werden in diesem Artikel in den entsprechenden Abschnitten behandelt. Ein „Befehl“ kann ein Such- und Ersetzungsmuster für reguläre Ausdrücke sein. Lesen Sie weiter, um zu erfahren, wie „sed“ funktioniert und grundlegende Befehle erlernt. Wie ich bereits erwähnt habe, ist „sed“ ein sehr leistungsfähiges Tool mit vielen weiteren verfügbaren Optionen, die ich in diesem Artikel behandeln werde.
BeispieldateienWenn Sie ein Terminal öffnen, können Sie eine Datei für das „sed“-Beispiel erstellen. Führen Sie den folgenden Befehl aus:
cd ~ grep --help >grephelp.txt
Sie sollten jetzt eine Datei namens grephelp.txt in Ihrem HOME-Ordner haben. Der Inhalt dieser Datei sind Hilfeanweisungen für den Befehl grep.
SuchenDie Suche nach einer bestimmten Zeichenfolge ist eine häufige Funktion von Editoren, und die Durchführung einer Suche in „sed“ ist keine Ausnahme.
Führen Sie eine Suche durch, um Zeichenfolgen in Dateien zu finden. Werfen wir einen Blick auf eine einfache Suche.
Wenn wir in der Beispieldatei nach dem Wort PATTERN suchen wollten, würden wir den folgenden Befehl verwenden:
sed -n 's/PATTERN/PATTERN/p' grephelp.txt
Hinweis: Wenn Sie den Befehl ausschneiden und einfügen, achten Sie darauf, die einfachen Anführungszeichen durch die standardmäßigen einfachen Anführungszeichen auf Ihrer Tastatur zu ersetzen.
Der Parameter -n wird verwendet, um das automatische Drucken jeder Zeile zu unterdrücken (mit Ausnahme der mit dem p-Befehl angegebenen Zeile). Standardmäßig wird jede in „sed“ eingegebene Zeile auf der Standardausgabe (stdout) gedruckt. Wenn Sie den obigen Befehl ohne die Option „-n“ ausführen, sehen Sie jede Zeile der Originaldatei zusammen mit den entsprechenden Zeilen.
Der zu durchsuchende Dateiname lautet „grephelp.txt“, den wir im Abschnitt „Beispieldateien“ erstellt haben.
Der verbleibende Teil ist 's/PATTERN/PATTERN/p'. Dieser Abschnitt ist grundsätzlich in vier Teile gegliedert. Der erste Teil von s gibt an, dass ein Ersetzen oder Suchen und Ersetzen durchgeführt werden soll.
Der verbleibende zweite und dritte Teil sind Muster. Das erste ist das Muster, nach dem gesucht werden soll, und das letzte ist das Muster, das mit der Zeichenfolge im Ersetzungsstream übereinstimmt. In diesem Beispiel suchen wir die Zeichenfolge PATTERN und ersetzen sie durch PATTERN. Durch das Suchen und Ersetzen derselben Zeichenfolge ändern wir die Datei überhaupt nicht, nicht einmal auf dem Bildschirm.
Der letzte Befehl ist p. Es gibt an, dass nach dem Ersetzen eine neue Zeile gedruckt wird. Da die gleiche Zeichenfolge ersetzt wird, ändert sich natürlich nichts. Da wir das Drucken von Zeilen mit dem Parameter -n unterdrückt haben, werden die geänderten Zeilen mit dem Befehl p gedruckt.
Mit diesem vollständigen Befehl können wir eine Suche durchführen und passende Ergebnisse anzeigen.
ErsatzWenn Sie nach einer bestimmten Zeichenfolge suchen, möchten Sie möglicherweise die neue Zeichenfolge durch die passende Zeichenfolge ersetzen. Das Ersetzen einer Zeichenfolge durch eine andere ist ein sehr häufiger Vorgang.
Wir können die gleiche Suche mit dem folgenden Befehl durchführen:
sed -n 's/PATTERN/Pattern/p' grephelp.txt
Zu diesem Zeitpunkt ändert sich die Zeichenfolge „PATTERN“ in „Pattern“ und wird angezeigt. Wenn Sie die Datei mit dem Befehl cat grephelp.txt anzeigen, werden Sie feststellen, dass sich die Datei nicht geändert hat. Diese Änderung betrifft nur die Ausgabe auf dem Bildschirm. Sie können die Ausgabe wie folgt in eine andere Datei weiterleiten:
sed 's/PATTERN/Pattern/' grephelp.txt > grephelp1.txt
Es existiert nun eine neue Datei mit dem Namen grephelp1.txt, in der die geänderte Datei gespeichert ist. Wenn p als vierte Option übrig bleibt, besteht das Problem darin, dass jede Zeile der ersetzten Zeichenfolge in der Datei zweimal wiederholt wird. Wir können auch den Parameter „-n“ entfernen, um das Drucken aller Zeilen zu ermöglichen.
Eine andere Möglichkeit, Zeichenfolgen durch dieselbe Zeichenfolge zu ersetzen, besteht darin, das &-Symbol zur Darstellung der Suchzeichenfolge zu verwenden. Den gleichen Effekt hat beispielsweise der Befehl s/PATTERN/&/p. Wir können eine Zeichenfolge hinzufügen, um beispielsweise S hinzuzufügen, können wir den Befehl s/PATTERN/&S/p verwenden.
Was wäre, wenn wir in jeder Zeile nur ein bestimmtes Muster ersetzen möchten? Sie können bestimmte Vorkommen von Übereinstimmungen angeben, die ersetzt werden sollen. Natürlich ist die Ersetzung jeder Zeile eine bestimmte Zahl. Die Beispieldatei enthält beispielsweise viele Bindestriche. Einige Zeilen haben mindestens zwei Bindestriche, sodass wir den zweiten Bindestrich in jeder Zeile durch ein anderes Zeichen ersetzen können. Der Befehl zum Ersetzen des zweiten Bindestrichs durch ein Sternchen * in jeder Zeile wäre:
sed 's/-/*/2' grephelp.txt
Hier verwenden wir die Originale, um den Austausch durchzuführen. Zeichen - werden durch * ersetzt. 2 bedeutet, dass wir die zweite ersetzen möchten – in jeder Zeile, falls vorhanden. Wenn wir Befehl 2 weglassen, wird das erste Vorkommen des Bindestrichs ersetzt. Anstelle von Bindestrichen wird in jeder Zeile nur der erste Bindestrich ersetzt.
Wenn Sie alle Bindestriche in einer Zeile suchen und durch ein Sternchen ersetzen möchten, verwenden Sie den g-Befehl:
sed 's/-/*/g' grephelp.txt
Befehle können auch kombiniert werden. Angenommen, Sie möchten die Bindestriche ersetzen, die ab dem zweiten Mal erscheinen, der Befehl wäre:
sed 's/-/*/2g' grephelp.txt
现在从第二个开始出现的破折号将被星号取代。
删除搜索过程中有很多时候你可能想要完全删除搜索字符串。
例如,如果要从文件中删除所有破折号,你可以使用以下命令:
sed 's/-//g' grephelp.txt
替换字符串为空白,因此匹配的字符串将被删除。
添加当找到匹配时,你可以添加一行特定的文本,来使这行在浏览或打印中突出。
如果要在匹配后插入新行,那么使用 a 命令,后面跟上新行的字符串。还包括要匹配的字符串。例如,我们可以找到一个 --,并在匹配的行之后添加一行。新行的字符串将是 double dash before this line。
sed '/--/ a "double dash before this line"' grephelp.txt
如果要在包含匹配字符串的行之前加上这行,请使用 i 命令,如下所示:
sed '/--/ i "double dash after this line"' grephelp.txt
如果需要改变/变换一行,则可以使用命令 c。
假设我们有个有一些私人信息的文档,我们需要更改包含特定字符串的行。c 命令将改变整行,而不仅仅是搜索字符串。
假设我们想要阻止示例文件中包含单词 PATTERN 的每一行。更改的行将显示为 This line is Top Secret。命令是:
sed '/PATTERN/ c This line is Top Secret' grephelp.txt
可以进行更改特定字母的大小写的转换。例如,我们可以使用命令 y 将所有小写 a 更改为大写 A,如下所示:
sed 'y/a/A/' grephelp.txt
可以指定多个字母,如 abdg,如下命令所示:
sed 'y/abdg/ABDG/' grephelp.txt
确保第二组字母与第一组字母的顺序相同,否则会被替换和转换。例如,字符串 y/a/D/ 将用大写 D 替换所有小写的 a。
就地更改如果你确实要更改所使用的文件,请使用 -i 选项。
例如,要将 PATTERN 改为 Pattern,并对文件进行更改,则命令为:
sed -i 's/PATTERN/Pattern/' grephelp.txt
现在文件 grephelp.txt 将被更改。-i 选项可以与上述任何命令一起使用来更改原始文件的内容。
练习这些命令,并确保你理解它们。“sed” 命令非常强大。
(题图:Pixabay,CC0)
Das obige ist der detaillierte Inhalt vonEinführung: Erfahren Sie, wie Sie sed in den Grundlagen von LFCS verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!