sed高階用法
阿新 • • 發佈:2020-09-07
1 [root@localhost sed]# sed -r '/^adm/{h;d};$G' passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 daemon:x:2:2:daemon:/sbin:/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/halt9 root:x:3:9:root:/xoot:/sbin/bash 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 operator:x:11:0:operator:/root:/sbin/nologin 12 adm:x:3:4:adm:/var/adm:/sbin/nologin 13 [root@localhost sed]#
1 [root@localhost sed]# sed -r '/^adm/h;/^adm/d;$G' passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin4 daemon:x:2:2:daemon:/sbin:/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 root:x:3:9:root:/xoot:/sbin/bash 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 operator:x:11:0:operator:/root:/sbin/nologin12 adm:x:3:4:adm:/var/adm:/sbin/nologin 13 [root@localhost sed]#
兩者寫法等價
思想:
sed -r '/^adm/{h;d};$G' passwd 語句中的{}表示,對一行語句同時執行多個命令;h表示將模式空間的內容放到暫存空間中(覆蓋暫存空間預設的回車符),H表示將模式空間的內容追加到暫存空間;G表示將暫存空間的內容追加到模式空間,g表示將暫存空間的內容放到模式空間中(覆蓋模式空間原有的內容);
1 [root@localhost sed]# sed '1{h;d};2,5H;$G' passwd 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 root:x:3:9:root:/xoot:/sbin/bash 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 operator:x:11:0:operator:/root:/sbin/nologin 12 root:x:0:0:root:/root:/bin/bash 13 bin:x:1:1:bin:/bin:/sbin/nologin 14 daemon:x:2:2:daemon:/sbin:/sbin/nologin 15 adm:x:3:4:adm:/var/adm:/sbin/nologin 16 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 17 [root@localhost sed]#
1 [root@localhost sed]# cat passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 sync:x:5:0:sync:/sbin:/bin/sync 8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9 halt:x:7:0:halt:/sbin:/sbin/halt 10 root:x:3:9:root:/xoot:/sbin/bash 11 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 12 operator:x:11:0:operator:/root:/sbin/nologin 13 [root@localhost sed]#
1 [root@localhost sed]# sed '1{h;d};3x;$G' passwd 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 root:x:0:0:root:/root:/bin/bash 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 root:x:3:9:root:/xoot:/sbin/bash 10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 operator:x:11:0:operator:/root:/sbin/nologin 12 daemon:x:2:2:daemon:/sbin:/sbin/nologin 13 [root@localhost sed]#
sed '1{h;d};3x;$G' passwd 語句中的3x表示第三行的模式空間和暫存空間的內容互換。
1 [root@localhost sed]# sed '1,5{H;d};$G' passwd 2 sync:x:5:0:sync:/sbin:/bin/sync 3 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 4 halt:x:7:0:halt:/sbin:/sbin/halt 5 root:x:3:9:root:/xoot:/sbin/bash 6 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 7 operator:x:11:0:operator:/root:/sbin/nologin 8 9 root:x:0:0:root:/root:/bin/bash 10 bin:x:1:1:bin:/bin:/sbin/nologin 11 daemon:x:2:2:daemon:/sbin:/sbin/nologin 12 adm:x:3:4:adm:/var/adm:/sbin/nologin 13 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 14 [root@localhost sed]# sed '1{h;d};2,5{H;d};$G' passwd 15 sync:x:5:0:sync:/sbin:/bin/sync 16 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 17 halt:x:7:0:halt:/sbin:/sbin/halt 18 root:x:3:9:root:/xoot:/sbin/bash 19 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 20 operator:x:11:0:operator:/root:/sbin/nologin 21 root:x:0:0:root:/root:/bin/bash 22 bin:x:1:1:bin:/bin:/sbin/nologin 23 daemon:x:2:2:daemon:/sbin:/sbin/nologin 24 adm:x:3:4:adm:/var/adm:/sbin/nologin 25 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 26 [root@localhost sed]#
1 [root@localhost sed]# sed 'g' passwd 2 3 4 5 6 7 8 9 10 11 12 13 [root@localhost sed]# sed 'g' passwd|wc -l 14 11
特點:sed的暫存空間預設的內容為回車符,固直接追加,會出現多出一個空行。
1 [root@localhost sed]# sed '/adm/{n;n;s/sync/ppp/g}' passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 ppp:x:5:0:ppp:/sbin:/bin/ppp 8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9 halt:x:7:0:halt:/sbin:/sbin/halt 10 root:x:3:9:root:/xoot:/sbin/bash 11 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 12 operator:x:11:0:operator:/root:/sbin/nologin 13 [root@localhost sed]#
1 [root@localhost sed]# sed '1h;2,$g' passwd 2 root:x:0:0:root:/root:/bin/bash 3 root:x:0:0:root:/root:/bin/bash 4 root:x:0:0:root:/root:/bin/bash 5 root:x:0:0:root:/root:/bin/bash 6 root:x:0:0:root:/root:/bin/bash 7 root:x:0:0:root:/root:/bin/bash 8 root:x:0:0:root:/root:/bin/bash 9 root:x:0:0:root:/root:/bin/bash 10 root:x:0:0:root:/root:/bin/bash 11 root:x:0:0:root:/root:/bin/bash 12 root:x:0:0:root:/root:/bin/bash 13 [root@localhost sed]#
[root@x112 etc]# sed -nr '/^<IfModule dir_module>/p' /usr/local/apache/conf/httpd.conf
<IfModule dir_module>
#在<IfModule dir_module>內容下一行末尾,新增index.php資訊
[root@x112 etc]# sed -rn '/^<IfModule dir_module>/{n;s/$/index.php/p}' /usr/local/apache/conf/httpd.conf
DirectoryIndex index.html index.php
[root@x112 etc]# sed -ri '/^<IfModule dir_module>/{n;s/$/index.php/}' /usr/local/apache/conf/httpd.conf
DirectoryIndex index.html index.php