sed 命令用法

  -n  不将模式空间的内容显示至屏幕

       

 

  -i  之际对原文件按进行编辑操作

  地址定界操作:

    /parttern1/,/parttern2/   从第一个匹配模式开始编辑  到第二个匹配模式出现然后停止操作

    #,#  对第#行到#行进行操作

      [root@bogon ~]# sed '1,8d' /etc/fstab 

       

 

    #,+# 对第#行到+#多少行的内容匹配进行操作

      [root@bogon ~]# sed '1,+2d' /etc/fstab 

       

 

    /pattern/ 模式匹配操作     [root@bogon ~]# sed '/^UUID/d' /etc/fstab 

      

 

   步进匹配:

          1~2:  [root@bogon ~]# sed '1~2d' /etc/fstab

      

 

        2~2:[root@bogon ~]# sed '2~2d' /etc/fstab

      

  -p 打印匹配到的行值屏幕

     [root@bogon ~]# sed '1~2p' /etc/fstab   打印步进为2的所有奇数行的内容至屏幕

      

 

  --r /PATH/TO/SOMEFILE :读取指定文件的内容至当前文件被匹配的行后面;具有文件合并的功能

  sed  '3r /etc/issue' /etc/fstab   直接把另一个文件读入 /etc/fstab 文件的第三行以后  

    

 

  sed '/^UUID/r /etc/issue' /etc/fstab  在匹配到行UUID后面都添加/etc/issue文件内容

    

  =:为模式匹配到的行打印行号

    

    

  !:取反操作

     

  a \text:在匹配到的行后面追加内容   [root@bogon ~]# sed '3a \xiaoqiang'  /etc/fstab

      sed '/^UUID/a \# add new device base on UUId' /etc/fstab

    

  i \text :在匹配的行前面插入内容  [root@bogon ~]# sed '3i \xiaoqiang'  /etc/fstab

    

  c \text :将匹配到的行整行替换

    [root@bogon ~]# sed '/^UUID/c \#add new device' /etc/fstab

    

 

  s/// :全局替换,其分隔符可自行指定,常用的有s@@@ , s###等

    替换标记:

      g:全局替换

        

 

      w /path/to/somefile:将替换成功的结果保存至指定文件中;

        

  给文件开头都添加md字母  发现的特殊功能  暂时还不知道怎么理解正则匹配   

        

        

    [root@bogon ~]# sed  's@^[[:space:]]@@' /etc/grub2.cfg    

            将所有的空格都替换成空

        ------>>>>>

    [root@bogon ~]# sed  's@^#[[:space:]]*@@'  /etc/fstab

            替换以#号开头的行匹配多次为什么都没有

        

    [root@bogon ~]# sed -e 's@^#[[:space:]]*@@'  -e '/^UUID/d' /etc/fstab

        

       [root@bogon ~]# echo "/var/log/messages" | sed 's@[^/]\+$@@'

       给出一个文件的全路径     过滤之后只显示文件的路径就可以

       

       [root@bogon ~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'

       扩展正则的使用    [root@bogon ~]# echo "/var/log/messages/" | sed  -r 's@[^/]+/?@@'

       

 

         p:显示替换成功的行

        

    sed 编辑文本的模型:

            

  sed   高级命令部分

   -h:将模式空间的内容覆盖到保持空间

   -H:将模式空间的内容追加至保持空间

   -g:将保持空间的内容覆盖至模式空间

           -G:将保持空间的内容追加至模式空间 

     -x :将模式空间的内容与保持孔家的内容互换

           -n:覆盖读取匹配到行的下一行至保持空间

     -N:追加读取匹配到行的下一行至保持空间

           -d:删除模式空间的行

     -D:删除多行模式空间的所有行

       [root@bogon ~]#    sed -n "n;p" /etc/fstab      ‘;’号是分割多条命令的

        注解:   加上-n之后就不会重复显示模式空间内容了  sed命令开始的时候默认不加模式匹配时 都会从第一行读取文件内容

           但是只要遇到条件 n --next的简写 就会匹配到第二行 然后把第二行的内容写入模式空间进行 p 打印出来   

         只显示偶数行的内容了

          

       [root@bogon ~] #  sed '1!G;h;$!d' /etc/fstab

          命令实现的模型图:

                   

        上面的图解还是有一点的小误  如果看到的学者需要理解 不明白之处可以留言

      [root@bogon ~]# sed '$!d' /etc/fstab

      [root@bogon ~]# sed '$!N;$!D' /etc/fstab

        

 

 

        逆序显示文件内容(等同于tac命令)

        

     [root@bogon ~]# sed '/^$/d;G' /etc/fstab    删除原有的所有空白行,而后为所有的非空白行添加一个空白行 

       就是删除以空开始结尾的行  G然后将保持空间的值 追加至模式空间进行匹配显示

        

     [root@bogon ~]# sed 'n;d' /etc/fstab

       sed 读取文件内容 读取第一行 然后让第二行把第一行覆盖了 又执行删除操作 所有覆盖的第一行又出来了 以此类推  会显示奇数行的内容

        

     [root@bogon ~]# sed 'G' /etc/fstab     G 表示将保持空间的值追加至模式空间打印出来  在前面没有-n选项的情况下

       

 

posted @ 2018-06-26 17:00  超我  阅读(28)  评论(0编辑  收藏  举报