Ausführliche Erläuterung der Beispielcodefreigabe für den Befehl sed unter Linux

黄舟
Freigeben: 2017-06-07 10:26:16
Original
1531 Leute haben es durchsucht

Einführung

sed ist ein Online-Editor, der Inhalte Zeile für Zeile verarbeitet. Während der Verarbeitung wird die aktuell verarbeitete Zeile in einem temporären Puffer gespeichert, der als „Musterraum“ bezeichnet wird. Anschließend wird der Befehl sed verwendet, um den Inhalt des Puffers zu verarbeiten. Nach Abschluss der Verarbeitung wird der Inhalt des Puffers an gesendet Bildschirm. Verarbeiten Sie dann die nächste Zeile und wiederholen Sie den Vorgang bis zum Ende der Datei. Der Dateiinhalt wird nicht geändert, es sei denn, Sie verwenden eine Umleitung zum Speichern der Ausgabe. Sed wird hauptsächlich zum automatischen Bearbeiten einer oder mehrerer Dateien verwendet.

sed verwendet Parameter

[root@www ~]# sed [-nefr] [动作]
Nach dem Login kopieren

Optionen und Parameter:

-n: Silent-Modus verwenden. Bei normaler sed-Nutzung werden normalerweise alle von STDIN kommenden Daten im Terminal aufgelistet. Wenn jedoch der Parameter -n hinzugefügt wird, werden nur die von sed speziell verarbeiteten Zeilen (oder Aktionen) aufgelistet.

-e: Sed-Aktionen direkt im Befehlszeilenmodus bearbeiten;

-f: Sed-Aktionen direkt in eine Datei schreiben, -f Datei Name, den Sie ausführen können sed-Aktion im Dateinamen;

-r: sed-Aktion unterstützt erweiterte reguläre Notationssyntax. (Die Standardeinstellung ist die grundlegende reguläre Notationssyntax)

-i: Ändern Sie den Inhalt der gelesenen Datei direkt, anstatt ihn an das Terminal auszugeben.

Aktionsbeschreibung: [n1[,n2]]Funktion

n1, n2: dürfen nicht vorhanden sein, stellen im Allgemeinen „Wählen Sie die Anzahl der Zeilen für die Aktion“ dar, z. B. wenn meine Die Aktion muss zwischen 10 und 20 Zeilen ausgeführt werden, dann 『10,20[AktionVerhalten]』

Funktion:

a:neu , Auf a können Zeichenfolgen folgen, und diese Zeichenfolgen werden in einer neuen Zeile (der aktuellen nächsten Zeile) angezeigt. ~

c: Stattdessen können auf c Zeichenfolgen folgen, und diese Zeichenfolgen können die Zeilen zwischen n1 und ersetzen n2!

d: Löschen, da es sich um eine Löschung handelt, daher folgt auf d normalerweise kein Dong Dong;

i: Einfügen, auf i kann eine Zeichenfolge folgen, und Diese Zeichenfolgen werden in einer neuen Zeile (der aktuellen vorherigen Zeile) angezeigt.

p: Drucken, d. h. ausgewählte Daten ausdrucken. Normalerweise wird p zusammen mit dem Parameter sed -n~

s: replacement ausgeführt, Sie können die Ersetzungsarbeit direkt durchführen! Normalerweise kann diese Aktion mit einer regulären Notation gepaart werden! Zum Beispiel 1,20s/alt/neu/g Das ist alles!

In Zeileneinheiten hinzufügen/löschen

Listen Sie den Inhalt von /etc/passwd auf und drucken Sie die Zeilennummer aus. Löschen Sie gleichzeitig die Zeilen 2 bis 5!

[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....
Nach dem Login kopieren

Die Aktion von sed ist '2,5d', d ist Löschung! Da er die Zeilen 2-5 gelöscht hat, enthalten die angezeigten Daten die Zeilen 2-5 nicht ~ Bitte beachten Sie außerdem, dass Sie ursprünglich sed -e hätten ausgeben sollen, es funktioniert jedoch ohne -e! Gleichzeitig ist auch zu beachten, dass die auf sed folgenden Aktionen in zwei einfache Anführungszeichen gesetzt werden müssen ''!

Einfach die 2. Zeile löschen

nl /etc/passwd | sed '2d'
Nach dem Login kopieren

So löschen Sie die dritte bis letzte Zeile

nl /etc/passwd | sed '3,$d'
Nach dem Login kopieren

Nach der zweiten Zeile (d. h. fügen Sie sie zur dritten hinzu). Zeile ) plus die Worte „Neuer Zeilentext?“!

[root@www ~]# nl /etc/passwd | sed '2a new line text'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
new line text
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
Nach dem Login kopieren

Wenn Sie dann ersetzen und in Zeileneinheiten vor der zweiten Zeile anzeigen möchten

nl /etc/passwd | sed '2i new line text'
Nach dem Login kopieren

ersetzen Sie den Inhalt der Zeilen 2-5 durch „Was ist mit“. „Keine 2-5 Nummer“?

[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(后面省略).....
Nach dem Login kopieren

Mit dieser Methode können wir die gesamte Datenzeile ersetzen!

Nur ​​die Zeilen 5-7 in der Datei /etc/passwd auflisten

[root@www ~]# nl /etc/passwd | sed -n '5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
Nach dem Login kopieren

Sie können die zeilenweise Anzeigefunktion von sed verwenden, um den Inhalt einer bestimmten Datei aufzulisten. Bestimmt Zeilennummern werden zur Anzeige ausgewählt.

Daten suchen und anzeigen

Suchen Sie /etc/passwd nach Zeilen mit dem Root-Schlüsselwort

nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略
Nach dem Login kopieren

Wenn Root gefunden wird, außer allen Zeilen ausgeben , werden auch passende Zeilen ausgegeben.

Bei Verwendung von -n werden nur die Zeilen gedruckt, die die Vorlage enthalten.

nl /etc/passwd | sed -n '/root/p'
1  root:x:0:0:root:/root:/bin/bash
Nach dem Login kopieren

Daten suchen und löschen

Alle Zeilen löschen, die root in /etc/passwd enthalten, und andere Zeilen ausgeben

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已经删除了
Nach dem Login kopieren

Befehle für Daten suchen und ausführen

Nachdem Sie die Zeile gefunden haben, die dem Muster Eastern entspricht,

durchsuchen Sie /etc/passwd, suchen Sie die Zeile, die root entspricht, und führen Sie eine Reihe von Befehlen in geschweiften Klammern aus, wobei jeder Befehl durch ein Semikolon getrennt ist. Ersetzen Sie hier bash durch blueshell und geben Sie dann diese Zeile aus:

 nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
 1  root:x:0:0:root:/root:/bin/blueshell
Nach dem Login kopieren

Wenn Sie nur das erste Bash-Schlüsselwort von /etc/passwd durch blueshell ersetzen, exit

nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    
1  root:x:0:0:root:/root:/bin/blueshell
Nach dem Login kopieren

Das letzte Q dient zum Beenden.

Daten suchen und ersetzen

Neben dem gesamten Zeilenverarbeitungsmodus kann sed auch Teildaten mithilfe von Zeileneinheiten suchen und ersetzen. Grundsätzlich sind die Suchvorgänge und Ersetzungen von sed denen von vi ziemlich ähnlich! Es sieht ungefähr so ​​aus:

sed 's/string to be replacement/new string/g'

Beobachten Sie zunächst die Originalinformationen und verwenden Sie /sbin/if config Abfrage IP

[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....
Nach dem Login kopieren

本机的ip是192.168.1.100。

将 IP 前面的部分予以删除

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
Nach dem Login kopieren

接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 后面的部分予以删除

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
Nach dem Login kopieren

多点编辑

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

1 root:x:0:0:root:/root:/bin/blueshell

2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

直接修改文件内容(危险动作)

sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧!

利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
Nach dem Login kopieren

利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』

[root@www ~]# sed -i '$a # This is a test' regular_express.txt
Nach dem Login kopieren

由于 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!

sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Beispielcodefreigabe für den Befehl sed unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!