Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Detaillierte Erläuterung der Verwendung von sed
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.
[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 就是啦!
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 .....(后面省略).....
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'
Um Zeile 3 bis zum Ende zu löschen Eine Zeile
nl /etc/passwd | sed '3,$d'
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 .....(后面省略).....
Wenn es vor der zweiten Zeile steht,
nl /etc/passwd | sed '2i drink tea'
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.
[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 .....(后面省略).....
[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 .....(后面省略).....
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/shutdownSuchen Sie nach
/etc/passwd-Zeilen mit dem Root-Schlüsselwort
Wenn Root gefunden wird, außer Ausgabe Alle Zeilen werden auch passende Zeilen ausgegeben.
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 ....下面忽略
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
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已经删除了
Nachdem Sie die Zeile gefunden haben, die dem Muster Ost entspricht,
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' 1 root:x:0:0:root:/root:/bin/blueshell
Das letzte Q ist das Beenden.
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样: 先观察原始信息,利用 /sbin/ifconfig 查询 IP 将 IP 前面的部分予以删除 接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 将 IP 后面的部分予以删除 一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell -e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。 利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 ! 利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』 由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』! sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
[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
.....(以下省略).....
本机的ip是192.168.1.100。[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
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
多点编辑
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
直接修改文件内容(危险动作)
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试! 我们还是使用下载的 regular_express.txt 文件来测试看看吧![root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
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!