Dieser Artikel ist Teil einer fortlaufenden Unix Sed Tutorial-Reihe. In früheren Artikeln haben wir über den sed-Druckvorgang und den sed-Löschvorgang gesprochen.
In diesem Artikel sehen wir uns an, wie man den sed-Ersatzbefehl „s“ verwendet.
Der `s‘-Befehl ist wahrscheinlich der wichtigste in `sed‘ und hat viele verschiedene Optionen.
Der Befehl `s‘ versucht, den Musterraum mit dem bereitgestellten REGEXP abzugleichen; Wenn die Übereinstimmung erfolgreich ist, wird der übereinstimmende Teil des Musterbereichs durch REPLACEMENT ersetzt.
Syntax: #sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename #sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
- s ist ein Ersatzbefehl
- / ist ein Trennzeichen
- REGEXP ist ein zu vergleichender regulärer Ausdruck
- REPLACEMENT ist ein zu ersetzender Wert
FLAGS können eines der folgenden sein
- g Ersetzen Sie alle Instanzen von REGEXP durch REPLACEMENT
- n Könnte eine beliebige Zahl sein, ersetzen Sie die n-te Instanz des REGEXP durch REPLACEMENT.
- p Wenn eine Ersetzung vorgenommen wurde, wird der neue Musterbereich gedruckt.
- ich passe REGEXP ohne Berücksichtigung der Groß-/Kleinschreibung an.
- w file Wenn eine Ersetzung durchgeführt wurde, schreibe das Ergebnis in die angegebene Datei.
- Wir können andere Trennzeichen verwenden (eines von @ %; :) anstelle von /
Lassen Sie uns zuerst die Datei thegeekstuff.txt erstellen, die in allen unten genannten Beispielen verwendet wird.
$ cat thegeekstuff.txt # Instruction Guides 1. Linux Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
Sehen wir uns jetzt einige interessante Beispiele für die Substitution an.
1. Ersetzen Sie das Wort „Linux“ durch „Linux-Unix“ mit sed s//
Im folgenden Beispiel wird in der Ausgabezeile „1. Linux-Unix Sysadmin, Linux Scripting etc“ nur zuerst wird Linux durch Linux-Unix ersetzt. Wenn keine Flags angegeben sind, wird die erste Übereinstimmung der Zeile ersetzt.
$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt # Instruction Guides 1. Linux-Unix Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux-Unix 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
2. Ersetzen Sie alle Erscheinungen eines Wortes mit sed s//g
Der folgende sed-Befehl ersetzt alle Vorkommen von Linux in Linux-Unix unter Verwendung des globalen Substitutions-Flags „g“.
$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt # Instruction Guides 1. Linux-Unix Sysadmin, Linux-Unix Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux-Unix 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
3. Ersetzen Sie nur das zweite Vorkommen eines Wortes mit sed s//2
Im folgenden Beispiel wird in der Ausgabezeile „1. Linux Sysadmin, Linux-Unix Scripting etc.“ nur 2. Auftreten von Linux wird durch Linux-Unix ersetzt.
$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt # Instruction Guides 1. Linux Sysadmin, Linux-Unix Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
4. Schreiben Sie Änderungen in eine Datei und drucken Sie die Änderungen mit sed s//gpw
Das folgende Beispiel hat eine Substitution mit drei Flags. Es ersetzt alle Vorkommen von Linux zu Linux-Unix und gibt die ersetzte Ausgabe aus und schreibt dasselbe in die angegebene Datei.
$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt 1. Linux-Unix Sysadmin, Linux-Unix Scripting etc. 4. Storage in Linux-Unix $ cat output 1. Linux-Unix Sysadmin, Linux-Unix Scripting etc. 4. Storage in Linux-Unix
5. Ersetzen Sie nur, wenn die Zeile mit dem Muster übereinstimmt, indem Sie sed verwenden
Wenn in diesem Beispiel die Zeile mit dem Muster „-“ übereinstimmt, werden alle Zeichen ab „-“ durch das Leerzeichen ersetzt.
$ sed '/\-/s/\-.*//g' thegeekstuff.txt # Instruction Guides 1. Linux Sysadmin, Linux Scripting etc. 2. Databases 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows
6. Löschen Sie die letzten X Zeichen aus jeder Zeile mit sed
Dieses sed-Beispiel löscht die letzten 3 Zeichen aus jeder Zeile.
$ sed 's/...$//' thegeekstuff.txt # Instruction Gui 1. Linux Sysadmin, Linux Scripting e 2. Databases - Oracle, mySQL e 3. Security (Firewall, Network, Online Security e 4. Storage in Li 5. Productivity (Too many technologies to explore, not much time availab # Additional F 6. Windows- Sysadmin, reboot e
7. Kommentare mit sed eliminieren
Löschen Sie alle Kommentarzeilen aus einer Datei wie unten gezeigt mit dem Befehl sed.
$ sed -e 's/#.*//' thegeekstuff.txt 1. Linux Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) 6. Windows- Sysadmin, reboot etc.
8. Beseitigen Sie Kommentare und Leerzeilen mit sed
In diesem Beispiel gibt es zwei Befehle, die durch „;“ getrennt sind
- Erster Befehl ersetzt die mit dem # beginnenden Zeilen durch Leerzeilen
- Zweiter Befehl löscht die leeren Zeilen.
$ sed -e 's/#.*//;/^$/d' thegeekstuff.txt 1. Linux Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) 6. Windows- Sysadmin, reboot etc.
9. Konvertieren Sie DOS-Zeilenumbrüche (CR/LF) in das Unix-Format mit sed
Kopieren Sie die DOS-Datei nach Unix, Sie könnten \r\n am Ende jeder Zeile finden.
Dieses Beispiel konvertiert das DOS-Dateiformat mit dem Befehl sed in das Unix-Dateiformat.
$sed 's/.$//' filename
10. Beseitigen Sie HTML-Tags aus der Datei mit sed
In diesem Beispiel stimmt der im Befehl sed angegebene reguläre Ausdruck mit den HTML-Tags überein und ersetzt sie durch das leere.
$ sed -e 's/<[^>]*>//g' This <b> is </b> an <i>example</i>. This is an example.