English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Der Linux sed-Befehl verwendet Skripte, um Textdateien zu verarbeiten.
Sed kann Textdateien gemäß den Anweisungen des Skripts verarbeiten und bearbeiten.
Sed wird hauptsächlich verwendet, um eine oder mehrere Dateien automatisch zu bearbeiten, wiederholte Operationen an Dateien zu vereinfachen und Umwandlungsprogramme zu schreiben.
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script> oder--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件> oder--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h oder--help 显示帮助。
-n oder--quiet oder--silent 仅显示script处理后的结果。
-V oder--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输入如下命令:
sed -e 4a\newLine testfile
首先查看testfile中的内容如下:
$ cat testfile #查看testfile 中的内容 HALLO LINUX! Linux ist ein freies Unix-Betriebssystem. Dies ist ein Linux-Testdatei! Linux test
使用sed命令后,输出结果如下:
$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串 HALLO LINUX! #testfile文件原有的内容 Linux ist ein freies Unix-Betriebssystem. Dies ist ein Linux-Testdatei! Linux test newline
将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 d'
[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 .....(der nachfolgende Text wird weggelassen).....
Zeile gelöscht!2,5sed-Aktionen' 2-5 d' , die d ist das Löschen! Da 2-5 Zeile geben, die ursprünglich gelöscht werden sollte, daher enthält die angezeigte Daten -e ist, es gibt keine -e auch, beachten Sie auch, dass die Aktion nach sed mit '' doppelten Anführungszeichen eingeschlossen sein muss!
Nur die 2 Zeile
nl /etc/passwd | sed '2d'
Die 3 bis zur letzten Zeile
nl /etc/passwd | sed '3$d'
Hinzufügen von『trinken tee?』am Ende der zweiten Zeile (das ist die dritte Zeile)!
[root@www ~]# nl /etc/passwd | sed '2a trinken tee' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin trinken tee 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(der nachfolgende Text wird weggelassen).....
Wenn Sie vor der zweiten Zeile
nl /etc/passwd | sed '2i trinken tee'
Wenn zwei Zeilen oder mehr hinzugefügt werden sollen, fügen Sie zwei Zeilen am Ende der zweiten Zeile hinzu, zum Beispiel Trinken Sie Tee oder ..... und trinken bier?
[root@www ~]# nl /etc/passwd | sed '2a Trinken Sie Tee oder ......\ > trinken bier ?' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin Trinken Sie Tee oder ...... trinken bier ? 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(der nachfolgende Text wird weggelassen).....
Zwischen jeder Zeile muss mit einem Backslash『 \ 』ein neuer Zeilenanfang hinzugefügt werden! Also können wir in dem obigen Beispiel sehen, dass am Ende der ersten Zeile ein \ vorhanden ist.
Die2-5Den Inhalt der Zeile ersetzen durch『Nein 2-5 number』ist?
[root@www ~]# nl /etc/passwd | sed '2,5c Nein 2-5 number' 1 root:x:0:0:root:/root:/bin/bash Nein 2-5 number 6 sync:x:5:0:sync:/sbin:/bin/sync .....(der nachfolgende Text wird weggelassen).....
Mit diesem Verfahren können wir Datenzeilen vollständig ersetzen!
Nur auflisten /etc/Die passwd-Datei enthält die Zeile 5-7 Zeile
[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
Durch diezeitspezifische Anzeigefunktion von sed kann man bestimmte Zeilen eines bestimmten Dateiangebotes auswählen und anzeigen.
Suchen /etc/passwd Zeilen mit dem Schlüsselwort root
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 .... Ignoriere den folgenden Text
Wenn root gefunden wird, werden alle Zeilen sowie die übereinstimmenden Zeilen ausgegeben.
Verwenden-Beim n wird nur die Zeile mit dem Muster gedruckt.
nl /etc/passwd | sed -n '/root/p' 1 root:x:0:0:root:/root:/bin/bash
Löschen/etc/passwd alle Zeilen, die root enthalten, andere Zeilen werden ausgegeben
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 .... Ignoriere den folgenden Text # Die Übereinstimmung der ersten Zeile root wurde gelöscht
Suchen/etc/passwd, die die Zeile mit root findet, führt die im Klammerausdruck aufgeführten Befehle aus, die durch Semikolons getrennt sind, hier wird bash durch blueshell ersetzt und diese Zeile ausgegeben:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q' 1 root:x:0:0:root:/root:/bin/blueshell
Das letztendliche q ist der Abbruch.
Neben dem Zeilenverarbeitungsmodus kann sed auch nach Datenblöcken suchen und ersetzen. Grundsätzlich ähnelt die Suche und Ersetzung von sed der von vi. Es funktioniert etwas so:
sed 's/zu ersetzenes Zeichen/neue Zeichenkette/g'
Beobachten Sie zunächst die ursprünglichen Informationen, nutzen Sie /sbin/ifconfig abfragen 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 .....(Nachfolgendes wird weggelassen).....
Die IP dieses Computers ist192.168.1.100。
Löschen Sie den Teil vor der 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
Dann löschen Sie den folgenden Teil, d.h.: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
Löschen Sie den Teil hinter der IP
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.100
Ein sed-Befehl, der löscht/etc/passwd von Zeile 3 bis zum Ende, und bash durch blueshell ersetzen
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 bedeutet多点编辑,der erste Editierbefehl löscht/etc/Daten von Zeile 3 bis zum Ende der passwd, das zweite Kommando ersetzt bash durch blueshell.
sed kann direkt den Inhalt der Datei ändern, ohne Pipeline-Befehle oder Datenstrom-Richtungen zu verwenden! Allerdings wird diese Aktion direkt den ursprünglichen Dateiinhalt ändern, daher bitte nicht willkürlich Systemkonfigurationen zum Testen verwenden! Wir verwenden noch die Datei regular_express.txt, um zu testen, ob das funktioniert!
The content of the regular_express.txt file is as follows:
[root@www ~]# cat regular_express.txt w3codebox. google. taobao. facebook. zhihu- weibo-
Use sed to replace the end of each line in regular_express.txt if it ends with . to !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt [root@www ~]# cat regular_express.txt w3codebox! google! taobao! facebook! zhihu- weibo-
:q:q
Use sed to add at the end of regular_express.txt directly # This is a test:
[root@www ~]# sed -i '$a # This is a test' regular_express.txt [root@www ~]# cat regular_express.txt w3codebox! google! taobao! facebook! zhihu- weibo- # This is a test
Since $ represents the last line, and the action of a is to add, therefore, the file is added at the end # This is a test!
sed's -i option can directly modify the file content, this feature is very helpful! For example, if you have a 100 lines, you need to add in the 100 lines added with some text, at this time using vim might go crazy! Because the file is too big! What to do? Use sed! Modify directly through sed/Functions replaced, you even don't need to use vim to revise!