Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Verstehen Sie in einem Artikel den sed-Befehl eines der drei Schwertkämpfer der Shell-Programmierung

Verstehen Sie in einem Artikel den sed-Befehl eines der drei Schwertkämpfer der Shell-Programmierung

齐天大圣
齐天大圣Original
2020-09-17 17:27:451706Durchsuche

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 &#39;/.*inet/p&#39;
        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 &#39;/.*inet/p&#39; | sed &#39;s/.*inet\s\+//g&#39;
172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255
Lassen Sie uns diese Anforderung in mehreren Schritten erfüllen. Filtern Sie zunächst alle Zeilen, die keine URL-Adressen enthalten.

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39; | sed &#39;s/.*inet\s\+//g&#39; | sed &#39;s/\s\+.*//g&#39;
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(&#39;beijing&#39;)"><font color="red">北京</font></a>
     <a href=http://shanghai.hellozx.com onclick="co(&#39;shanghai&#39;)"><font color="red">上海</font></a>
     <a href=http://tianjin.hellozx.com onclick="co(&#39;tianjin&#39;)"><font color="red">天津</font></a>
     <a href=http://chongqing.hellozx.com onclick="co(&#39;chongqing&#39;)"><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(&#39;jinan&#39;)"><font color=red style="font-size:14px;">济南</font></a>
 <a href="http://qingdao.hellozx.com" onclick="co(&#39;qingdao&#39;)"><font color=red style="font-size:14px;">青岛</font></a>

, dann löschen Sie alle doppelten Anführungszeichen und die Zeichen danach

# sed -n &#39;/http:/p&#39; 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn