zoukankan      html  css  js  c++  java
  • sed高级用法

     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/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 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/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/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 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

  • 相关阅读:
    【css】rem及其替换方案
    【css】如何实现环形进度条
    【js】我们需要无限滚动列表吗?
    【js】再谈移动端的模态框实现
    【js】callback时代的变更
    【js】为什么要使用react+redux
    【js】JavaScript parser实现浅析
    【css】回想下经典的布局
    【JS】温故知新: 从parseInt开始
    【渲染原理】浏览器渲染原理的个人整理
  • 原文地址:https://www.cnblogs.com/xiaofeng666/p/12805579.html
Copyright © 2011-2022 走看看