Detaillierte Erläuterung der Verwendung von sed

大家讲道理
Freigeben: 2017-05-28 10:24:14
Original
2185 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.

verwendete Parameter


Detaillierte Erläuterung der Verwendung von sed

[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
Nach dem Login kopieren

Detaillierte Erläuterung der Verwendung von sed

In Zeilen hinzufügen/löschen


will/ Der Inhalt von etc/passwd werden aufgelistet und die Zeilennummern werden ausgedruckt. Bitte löschen Sie gleichzeitig die Zeilen 2~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 Zeile 2 löschen


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


Um Zeile 3 bis zum Ende zu löschen Eine Zeile


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


wird nach der zweiten Zeile hinzugefügt (d. h. zur dritten Zeile hinzugefügt). ) Die Worte „Tee trinken?“ stehen darauf!


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


Wenn es vor der zweiten Zeile steht,


 nl /etc/passwd | sed '2i drink tea'
Nach dem Login kopieren


Wenn Sie mehr als zwei Zeilen hinzufügen möchten, fügen Sie zwei Zeilen nach der zweiten Zeile hinzu, z. B. „Tee trinken oder...“ .“ ...‘ und ‚Bier trinken?‘ >


Ein Backslash 『 』 muss zwischen jeder Zeile verwendet werden, um eine neue Zeile hinzuzufügen! Im obigen Beispiel können wir also finden, dass am Ende der ersten Zeile vorhanden ist.

Detaillierte Erläuterung der Verwendung von sedErsetzen und in Zeileneinheiten anzeigen

[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
Nach dem Login kopieren

Den Inhalt der Zeilen 2-5 durch „Nr. 2-5 Nummer“ ersetzen? Detaillierte Erläuterung der Verwendung von sed


Durch diese 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 '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 der zeilenweisen Anzeigefunktion von sed können Sie bestimmte Zeilennummern in einer Datei auswählen und anzeigen.

Daten suchen und anzeigen


[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
Suchen Sie nach

/etc/passwd-Zeilen mit dem Root-Schlüsselwort


Wenn Root gefunden wird, außer Ausgabe Alle Zeilen werden auch passende Zeilen ausgegeben.

Detaillierte Erläuterung der Verwendung von sedBei Verwendung von -n werden nur die Zeilen gedruckt, die die Vorlage enthalten.

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

Detaillierte Erläuterung der Verwendung von sed

Daten suchen und löschen

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

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



Suchen Sie nach Daten und führen Sie den Befehl aus.

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

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

suchen Sie /etc/passwd und finden Sie Führen Sie in der entsprechenden Root-Zeile eine Reihe von Befehlen in geschweiften Klammern aus, die durch Semikolons getrennt sind. Ersetzen Sie hier bash durch blueshell und geben Sie dann diese Zeile aus:

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

Beenden


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


Das letzte Q ist das Beenden.

数据的搜寻并替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:


sed 's/要被取代的字串/新的字串/g'
Nach dem Login kopieren


 

先观察原始信息,利用 /sbin/ifconfig 查询 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
Nach dem Login kopieren


-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 vonDetaillierte Erläuterung der Verwendung von sed. 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