三剑客之sed

grep:适用于找文本内容

sed:适用于大量修改。属于行编辑器。支持标准输入。是一行行的取到内存中处理。

格式:sed  [参数]   ‘地址命令’   文件        (可以只有命令,但不能只有地址)

一、参数

  -n    使默认输出不显示

  -i.后缀  真正的修改了文件。加后缀为了给原来的文件一个备份

  -r    支持扩展正则表达式

二、地址

  ①、不给为空,默认为全文处理

  ②、单地址:

    #:指定的行。  $:最后一行

    /正则表达式/

  ③、范围地址:

    #,#:几到几行

    #,+#:从几到几行及以后的行

    /正则/,/正则/:从第一个正则开始,到第二个。若第二个未出现,则一直到结尾

    #,/正则/

  ④、步进:

    奇数行:1~2   从第一行开始,每次加2行

    偶数行:2~2 从第二行开始,每次加2行

三、命令

  p  使结果显示

  d  将选中的行删除不显示,其他行显示(不是真的删除) sed   '1d;4d'  a.txt

  a [\]text  在后一行追加   (注:\可多个添加)a\  text  在下一行不顶头添加  a  text1  \n  text2  连续加两行

  i  [\]text     在上一行追加

  c [\]text  将本行替换

  w /path/file  将找到的写入file中

  r  /path/file  将file内容写入匹配的行的下面

  =  显示匹配的行号

  !   取反(给地址,不算命令)

  s///(g)  例如:sed -nr 's/(r..t)/\1er/gp' /data/passwd

           ifconfig |sed -n '2s/^.*inet//;s/ net.*//p'

           ifconfig |sed -n '2s/(.*inet)([0-9].*)( netmask.*)/\2/p'

           sed -nr '^#!s/^/#/p'  文件名 

           echo /etc/sysconfig |sed -nr 's/(.*)\/([^/]+)\/?/\2/p'

           echo /etc/sysconfig/ |sed -nr 's/(.*)\/([^/]+)\/?/\1/p'

注意sed中使用变量:①、“$n”

           ②、' '''$n''' '

 

修改网卡名为:①、sed -ir '/^GRUB_CMDLINE_LINUX=/s/(.*)"$/\1 net.ifnames=0"/' /etc/default/grub

       或 sed -ir '/^GRUB_CMDLINE_LINUX=/s/"$/ net.ifnames=0"/' etc/default/grub

       ②、Centos7、8:  grub2-mkconfig  -o  /boot/grub2/grub.cfg

         Ubuntu:  grub-mkconfig  -o  /boot/grub/grub.cfg

 

 

④、sed的高级用法:

    sed除了支持空间模式(pattern space),还支持保持空间(Hold space),它只负责暂时保留,不参与sed运算

    h  把pattern内容覆盖到hold空间

    H  把pattern内容追加到hold空间

    g  把hold内容覆盖到pattern空间

    G  把hold内容追加到pattern空间

    d  删除pattern空间的行

  将第三行推到第九行:sed '3h,9G'

            sed '3h,9G;9!d'

              

 

posted @ 2020-04-28 22:33  ldyaly  阅读(132)  评论(0编辑  收藏  举报