Sed是一種流式編輯器,是針對文檔的行來操作的。它是文本處理中常用的工具,能夠完美的配合正則表達式使用。比起grep/egrep來,功能更加強大。
▌sed命令的基本用法: sed [-nefri] ‘command’ filename
▎常用選項:
-n :只有經過sed 特殊處理的那一行纔會被列出來;
-e :可以多點編輯;
-r :sed 的動作支持的脫意;
-i :直接修改讀取的文件內容,而不是輸出到終端。
▎常用命令:
d :刪除對應行;
p :打印。通常會與參數 sed -n協同使用;
s :替換。配合g表示全部替換。
1、查找
1)特殊字符匹配:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [root@server01 test1] # sed -n '/r.t/'p passwd operator:x:11:0:operator: /root : /sbin/nologin sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin [root@server01 test1] # sed -n '/ro*t/'p passwd root:x:0:0:root: /root : /bin/bash operator:x:11:0:operator: /root : /sbin/nologin [root@server01 test1] # sed -n '/ro*t/'Ip passwd ##“I”忽略大小寫 root:x:0:0:root: /root : /bin/bash operator:x:11:0:operator: /root : /sbin/nologin Root:x:0:0:Root: /Root : /bin/bash [root@server01 test1] # sed -nr '/r+at/'p passwd ##“r”表示脫意 operator:x:11:0:operator: /root : /sbin/nologin sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin [root@server01 test1] # sed -nr '/o{2}/'p passwd root:x:0:0:root: /root : /bin/bash lp:x:4:7:lp: /var/spool/lpd : /sbin/nologin mail:x:8:12:mail: /var/spool/mail : /sbin/nologin operator:x:11:0:operator: /root : /sbin/nologin postfix:x:89:89:: /var/spool/postfix : /sbin/nologin [root@server01 test1] # sed -nr '/root|login/'p 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 ...... sshd:x:74:74:Privilege-separated SSH: /var/empty/sshd : /sbin/nologin postfix:x:89:89:: /var/spool/postfix : /sbin/nologin chrony:x:997:995:: /var/lib/chrony : /sbin/nologin |
2)打印指定行:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@server01 test1] # sed -n '3'p passwd daemon:x:2:2:daemon: /sbin : /sbin/nologin [root@server01 test1] # sed -n '3,5'p passwd 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 [root@server01 test1] # sed -n '20,$'p passwd postfix:x:89:89:: /var/spool/postfix : /sbin/nologin chrony:x:997:995:: /var/lib/chrony : /sbin/nologin [root@server01 test1] # sed -e '20,$'p -e '/lib/'p -n passwd ##單個命令執行多個動作 postfix:x:89:89:: /var/spool/postfix : /sbin/nologin chrony:x:997:995:: /var/lib/chrony : /sbin/nologin #同樣的行,第一次# chrony:x:997:995:: /var/lib/chrony : /sbin/nologin #同樣的行,第二次# |
2、刪除
1 2 3 4 5 | [root@server01 test1] # sed -i '10,$'d passwd ##刪除第10行到最後一行 [root@server01 test1] # wc -l passwd 9 passwd [root@server01 test1] # sed -i '/root/'d passwd ##刪除帶root關鍵詞的行 [root@server01 test1] # grep 'root' passwd |
3、替換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | [root@server01 test1] # sed '1,3s/root/ROOT/' 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@server01 test1] # sed '1,3s/root/ROOT/g' passwd ##“g”表示全部匹配項 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@server01 test1] # sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' passwd bash :x:0:0:root: /root : /bin/root ##調換兩個字符串的位置 bin:x:1:1:bin: /bin : /sbin/nologin ...... [root@server01 test1] # sed -r 's#([^:]+):(.*):([^:]+)#\3\2\1#g' passwd /bin/bashx :0:0:root: /rootroot /sbin/nologinx :1:1:bin: /binbin /sbin/nologinx :2:2:daemon: /sbindaemon ...... [root@server01 test1] # sed 's/[0-9]//g' passwd ##刪除所有數字 root:x:::root: /root : /bin/bash bin:x:::bin: /bin : /sbin/nologin daemon:x:::daemon: /sbin : /sbin/nologin ...... [root@server01 test1] # sed -r 's/(^root)/#&/g' passwd ##所有root開頭的行註釋掉 #root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin: /bin : /sbin/nologin daemon:x:2:2:daemon: /sbin : /sbin/nologin ...... |