sed編輯器被稱做流編輯器(stream editor),和普通的交互式文本編輯器剛好相反。在交互式文本編輯器中(好比vim),你能夠用鍵盤命令來交互式的插入、刪除或者替換數據中的文本。流編輯器則會自愛編輯器處理數據以前基於預習提供的一組規則來編輯數據流。正則表達式
sed編輯器能夠根據命令來處理數據流中的數據,這些命令要麼從命令行輸入,要麼存儲在一個命令文件中。sed會執行下列操做:vim
(1)一次從輸入中讀取一行數據。 (2)根據所提供的編輯器命令匹配數據 (3)安裝命令修改流中的數據 (4)將新的數據輸出到STDOUT
在流編輯器將全部命令與一行數據匹配完畢後,它會讀取下一行數據並重復這個過程。在流編輯器處理完流中的全部數據行後,它就會終止。bash
因爲命令是按順序逐行執行的,sed編輯器只需對數據流進行以便處理就能夠完成編輯操做。這使得sed編輯器要比交互式編輯器快得多,能夠快速完成對數據的自動修改。編輯器
用法命令行
sed [option]… 'script' intputfile
-n:不輸出模式空間內容到屏幕,既不自動打印 -e:多點編輯 -f:/PATH/SCRIPT_FILE:從指定文件中讀取編輯腳本 -r:支持使用擴展正則表達式 -i.bak:備份文件並原處編輯
script:
"地址命令"3d
(1)不給地址:對全文進行處理code
(2)單地址:ip
#:指定的行 /pattern/:被此處模式所可以匹配到的每一行
(3)地址範圍:string
#,# #,+# /pat1/,/pat2/ #,/pat1/
(4)~:步進
1~2 奇數行
2~2 偶數行it
d:刪除模式空間匹配的行 p:顯示模式空間中的內容 a[\]text:在指定行後面追加文本,支持使用\n實現多行追加 i[\]text:在行前面插入文本 c[\]text:替換行爲單行或多行文本 w /path/somefile:保存模式匹配的行至指定文件 r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行後 = :爲模式空間中的行打印行號 ! :模式空間中匹配行取反處理 s/oldstr/newstr/:查找替換,支持使用其它分隔符,s@@@,s### 替換標記: g:行內全局替換 p:顯示替換成功的行 w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
[root@local ~]# sed -n '2p' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
[root@local ~]# sed -n '1,4p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@local ~]# sed -n '/root/p' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
[root@local ~]# sed -n '1,/root/p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin 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
[root@local ~]# sed -n '/^$/=' /etc/fstab 1
[root@local ~]# sed '/root/a\superman' /etc/passwd root:x:0:0:root:/root:/bin/bash superman bin:x:1:1:bin:/bin:/sbin/nologin [……] operator:x:11:0:operator:/root:/sbin/nologin superman games:x:12:100:games:/usr/games:/sbin/nologin [……]
[root@local ~]# sed '/root/i\superman' /etc/passwd superman root:x:0:0:root:/root:/bin/bash [……] mail:x:8:12:mail:/var/spool/mail:/sbin/nologin superman operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin [……]
[root@local ~]# sed '/root/c\superman' /etc/passwd superman bin:x:1:1:bin:/bin:/sbin/nologin [……] mail:x:8:12:mail:/var/spool/mail:/sbin/nologin superman games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [……]
[root@local ~]# sed '1,10d' /etc/passwd 或[root@local ~]# cat -n /etc/passwd |sed '1,10d' 11 games:x:12:100:games:/usr/games:/sbin/nologin 12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13 nobody:x:99:99:Nobody:/:/sbin/nologin 14 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
[root@local ~]# nl /etc/passwd |sed '2a tea' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin tea 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@local ~]# sed -n 's/root/&superman/p' /etc/passwd rootsuperman:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/rootsuperman:/sbin/nologin
[root@local ~]# sed -n 's/root/superman&/p' /etc/passwd supermanroot:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/supermanroot:/sbin/nologin
[root@local ~]# sed 's/UUID/hahaha/g' /etc/fstab [……] hahaha=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 hahaha=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 hahaha=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[root@local ~]# sed -e 's/UUID/hahaha/g' -e 's/=/###/g' /etc/fstab [……] hahaha###227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 hahaha###7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 hahaha###12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
先把/etc/fstab複製到當前目錄下,以防止直接修改 [root@local ~]# cp /etc/fstab . [root@local ~]# sed -i.bak 's/=/$$$$$/g' fstab [root@local ~]# cat fstab fstab.bak [……] UUID$$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 UUID$$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 UUID$$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0 [……] UUID=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 UUID=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 UUID=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0 [root@local ~]#
[root@local ~]# cat script1.sed s/=/$$$$/ s/UUID/mytest/ [root@local ~]# sed -f script1.sed fstab [……] mytest$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0 mytest$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0 mytest$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0