Als einer der drei Schwertkämpfer der Shell-Programmierung ist die Bedeutung von sed offensichtlich. sed ist ein Stream-Programmierer, der jeweils eine Zeile und nach der Verarbeitung die nächste Zeile verarbeitet. Er unterstützt reguläre Ausdrücke und ist sehr leistungsfähig. Allerdings ist sed komplizierter als gewöhnliche Befehle und bietet viele Optionen. Es erfordert einige Anstrengung, es zu beherrschen. Werfen wir einen Blick auf die Rolle dieses leistungsstarken SED-Befehls anhand vieler Beispiele!
Syntaxformat: sed [Option] [Aktion]
Häufig verwendete Optionen sind wie folgt:
-n: sed gibt standardmäßig den gesamten Standardinhalt aus, aber nach dem Hinzufügen dieser Option nur die von sed verarbeiteten Zeilen wird angezeigt.
-e: Ermöglicht die Ausführung mehrerer Aktionen in derselben Zeile
-f: Lesen von Aktionen aus einer Datei
-i: Ändern Sie die Datei direkt, anstatt sie auf dem Bildschirm einzugeben (gefährlich)
Die Aktion enthält zu viele Parameter. Listen Sie sie unten auf:
a: Fügen Sie eine Zeile unterhalb der übereinstimmenden Zeile hinzu.
c: Ändern Sie die übereinstimmende Zeile mit neuem Inhalt.
d: Löschen die passenden Die Zeilen
i: Inhalt vor der passenden Zeile hinzufügen
p: Drucken
s: Ersetzen Sie den Inhalt der passenden Zeile
Beispiel 1: Drucken Sie den 5. Teil der /etc/passwd-Datei -10 Zeilen
# sed -n '5,10p' /etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
Beispiel 2: Löschen Sie Zeile 2 der Datei /etc/passwd, Zeilen 2 bis 10
# cat -n /etc/passwd | sed '2d' | sed '5,10d'
Zusätzlich zur oben genannten Methode können wir auch die verwenden -e Option zum Ausfüllen
# cat -n /etc/passwd | sed -e '2d' -e '5,10d'
Beispiel 3: Abrufen der Server-IP-Adresse
Dieser Fall ist sehr gut, ich schlage vor, dass Sie einen genaueren Blick darauf werfen
# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255 ether 00:16:3e:0a:01:ad txqueuelen 1000 (Ethernet) ……
Was wir brauchen ist 172.26.9.143.
Der erste Schritt besteht darin, die Zeile zu erhalten, die wir verarbeiten möchten.
# ifconfig eth0 | sed -n '/.*inet/p' inet 172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255
Der zweite Schritt besteht darin, die unnötigen Informationen durch Leerzeichen zu ersetzen Zum obigen Beispiel verwenden wir zunächst -n und p, um die gewünschten Zeilen zu erhalten. Dann filtern wir die unnötigen Informationen. Es ist zu beachten, dass s+ im regulären Ausdruck bedeutet, dass mindestens ein Leerzeichen vorhanden ist. Hier müssen Sie jedoch ein Escape-Zeichen vor dem Pluszeichen verwenden.
Beispiel 4
Als letztes Beispiel gebe ich Ihnen einen echten Fall, den ich gestern hatte. Die Anforderung lautet wie folgt: Erhalten Sie die URL-Adresse in einem Textabschnitt, aber das vorherige http:// ist nicht erforderlich. Ein Teil des Textinhalts lautet wie folgt: # ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g'
172.26.9.143 netmask 255.255.240.0 broadcast 172.26.15.255
# ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g' | sed 's/\s\+.*//g' 172.26.9.143
Ersetzen Sie dann alle unnötigen Informationen durch Leerzeichen. Löschen Sie zuerst http:// und alle Zeichen davor
<td width=820> <a href=http://beijing.hellozx.com onclick="co('beijing')"><font color="red">北京</font></a> <a href=http://shanghai.hellozx.com onclick="co('shanghai')"><font color="red">上海</font></a> <a href=http://tianjin.hellozx.com onclick="co('tianjin')"><font color="red">天津</font></a> <a href=http://chongqing.hellozx.com onclick="co('chongqing')"><font color="red">重庆</font></a></td></tr> <tr><td width=80 height=30 align=right> <b><font style="font-size:14px;">山东</font>:</b> </td><td width=820> <a href="http://jinan.hellozx.com" onclick="co('jinan')"><font color=red style="font-size:14px;">济南</font></a> <a href="http://qingdao.hellozx.com" onclick="co('qingdao')"><font color=red style="font-size:14px;">青岛</font></a>
, dann löschen Sie alle doppelten Anführungszeichen und die Zeichen danach
# sed -n '/http:/p' a.txt
Jetzt sieht die Bildschirmausgabe wie folgt aus
haikou.hellozx.com sanya.hellozx.com kunming .hellozx.com dali.hellozx.com xining.hellozx.com yinchuan.hellozx.com wulumuqi.hellozx.com ……
Das obige ist der detaillierte Inhalt vonVerstehen Sie in einem Artikel den sed-Befehl eines der drei Schwertkämpfer der Shell-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!