sed:stream editor(流編輯器)的縮寫是一種線上非互動式編輯器,它一次處理一行內容。這樣不斷重複,直到檔案末尾。
Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等
非互動式編輯器,一次處理一行內容。
支援正則表示式 與grep一樣,sed在檔案中查詢模式時也可以使用正則表示式(RE)和各種元字元,用於查詢和替換,以下是sed支援的元字元: 使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\) 使用擴充套件元字符集 ?, +, { }, |, ( ) sed -r #在實際使用的時候,都會加上 -r 引數,即使沒有用的擴充套件正則也不會有任何影響。
sed基本用法列印sed 預設會輸出檔案的每一行,無論這行內容是否能匹配上匹配模式。
# sed -r '' file_name
搜尋替換
sed會自動列印檔案的每一行,同時查詢模式匹配的行,找到後執行後面的命令,預設是 p 列印(不加 -n 的情況下)
示例檔案 [root@localhost ~]# vim test.txt MA Daggett, 341 King Road, Plymouth MA Alice Ford, 22 East Broadway, Richmond VA MA Thomas, 11345 Oak Bridge Road, Tulsa OK Terry Kalkas, 402 Ma Road, mA Falls PA Eric Adams, 20 Post Road, Sudbury mA Hubert Sims, 328A Brook Road, Roanoke VA Amy Wilde, 334 Ma Pkwy, Mountain View CA Sal Carpenter, 73 MA Street, Boston MA 1.搜尋每一行匹配到MA的將第一個替換為Massachusetts: [root@localhost ~]# sed -r 's/MA/Massachusetts/' test.txt s:----查詢 2.搜尋每一行,找到所有的MA字元,進行全域性替換為Massachusetts [root@localhost ~]# sed -r 's/MA/Massachusetts/g' test.txt 3.搜尋每一行,找到所有的MA字元,進行全域性替換為Massachusetts同時忽略大小寫 [root@localhost ~]# sed -r 's/MA/Massachusetts/gi' test.txt 4.-n #靜默輸出(不列印預設輸出) [root@localhost ~]# sed -r -n 's/MA/Massachusetts/' test.txt 案例: [root@localhost ~]# sed -r 's/SELINUX=disabled/SELINUX=enabled/' /etc/sysconfig/selinux
多重編輯選項 1.使用多重指令:-e 給予sed多個命令的時候需要-e選項 [root@localhost ~]# sed -r -e 's/MA/Massachusetts/' -e 's/PA/Pennsylvania/' test.txt 2.使用指令碼檔案:當有多個要編輯的專案時,可以將編輯命令放進一個腳本里,再使用sed搭配-f選項 -f<script檔案>或--file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案。 [root@localhost ~]# vim s.sed s/MA/Massachusetts/ s/PA/Pennsylvania/ s/CA/California/ s/VA/Virginia/ s/OK/Oklahoma/ [root@localhost ~]# sed -f s.sed test.txt 儲存輸出: [root@localhost ~]# sed -f s.sed test.txt > newfile.txt
地址(定址)
地址用於決定對哪些 行 進行編輯。地址形式可以是數字、正則表示式或二者的結合。如果沒有指定地址,sed將處理輸入檔案中的所有行。
[root@localhost ~]# head /etc/passwd > passwd #生成測試檔案 [root@localhost ~]# sed -r '1d' passwd #d:表示刪除-- 刪除檔案的第1行 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# sed -r '1,2d' passwd #刪除檔案的1-2行 daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# cat 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 ... [root@localhost ~]# sed -r '2,$d' passwd #刪除第2行到最後一行 root:x:0:0:root:/root:/bin/bash [root@localhost ~]# sed -r '/^root/d' passwd #匹配到root開頭的行,刪除此行 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# sed -r '/root/d' passwd #含有root的行都刪除 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# sed -r '/bash/,3d' passwd #匹配到bash行,從此行到第3行刪除 adm:x:3:4:adm:/var/adm:/sbin/nologin [root@localhost ~]# cat -n passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 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 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin [root@localhost ~]# sed -r '1~2d' passwd #刪除奇數行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync halt:x:7:0:halt:/sbin:/sbin/halt operator:x:11:0:operator:/root:/sbin/nologin [root@localhost ~]# sed '0~2d' passwd #刪除偶數行 passwd root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
sed流編輯器命令用法及解析 1.插入命令--i [root@localhost ~]# sed -r '2i\222222' passwd #在第2行插入 2.修改命令---c [root@localhost ~]# sed -r '4c\asfasdf' passwd [root@localhost ~]# sed -r '4c\11111111\ > aaaaaaaaaa\ > bbbbbbbbb' passwd 案例: [root@localhost ~]# sed -r '7c\SELINUX=enabled' /etc/sysconfig/selinux 3.選項 -i 會使得sed用修改後的資料替換原檔案 [root@localhost ~]# sed -r -i '7c\SELINUX=enabled' /etc/sysconfig/selinux #修改 [root@localhost ~]# sed -r -i 's/SELINUX=enabled/SELINUX=disabled/' /etc/sysconfig/selinux #替換 4.由於在使用 -i 引數時比較危險, 所以我們在使用i引數時在後面加上.bak就會產生一個備份的檔案,以防後悔 [root@localhost ~]# sed -r -i.bak 's/root/ROOT/' passwd
sed常見操作 [root@localhost ~]# cp /etc/ssh/ssh_config . 1.刪除配置檔案中 # 號註釋的行 [root@localhost ~]# sed -ri '/^#/d' ssh_config 2.給檔案行添加註釋: [root@localhost ~]# sed -r '2,5s/^/#/' passwd 3.給檔案行新增和取消註釋 [root@localhost ~]# sed -ri s/^#baseurl/baseurl/g /etc/yum.repos.d/CentOS-Base.repo [root@localhost ~]# sed -r s/^mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-Base.repo
最新評論