sed

一、sed:    流编辑器、行编辑器

  • sed模式空间:    默认不编辑源文件,进队模式空间中的数据做处理。将模式空间打印至屏幕

  • sed 'Address Command' file ……

  • Address

    • startLine,EndLine

      • 1,100    

      • $:    最后一行    $-1:    倒数第二行

    • /RegExp/

      • /^root/

    • /pattern1, pattern2/:    第一次被parttern1匹配到的行开始,至第一次被pattern2匹配到的行结束,中间的所有行

    • LineNumber:    指定的行

    • StartLine,+N:    从startLine开始,向后的N行

  • Command

    • d:    删除符号条件的行

      • sed '1,2d' /etc/fstab

      • sed '/oot/d' /etc/fstab

      • sed '1,+2d' /etc/fstab

    • p:    显示符合条件的行

    • a\string:    在指定的行后新加行,内容改为string

    • i \string:    在指定的行前新加行,内容改为string

      • /n:    可用于添加多行内容

    • r FILE:    将指定的文件内容添加至符合条件的行处

    • w FILE:    将指定的文件内容另存至指定的文件中

    • s/pattern/string/:    查找并替换,默认值替换每行第一次被模式匹配到的字符串

  • 加修饰符

    • g:    全局替换

    • i:    忽略字符大小写

    • s/// == s### == s@@@(只要后面三个符号相同即可)

    • &:    引用模式匹配整个串

二、sed [options] 'Address Command' file……

  • -n:    静默模式,不再默认显示默认空间中的内容

  • -i:    直接修改源文件

  • -e:    SCRIPT -e SCRIPT:    可以同时执行多个脚本

  • -f:    /PATH?TO?SED_SCRIPT

    • ded -f /path/to/script file

  • -r:    使用扩展正则

三、练习

  • 删除/etc/grub.conf文件中行首的空白字符

    • sed -r 's@^[[:SPACE:]] +@@g ' /etc/grub.conf

  • 替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5

    •  sed 's@\(id:\)[0-9]\(:initdefault:\)@\5\2@g' /etc/initdefault

  • 删除/etc/inittab文件中的空白行

    • sed '/^$/d' /etc/inittab

  • 删除/etc/inittab文件中开头的#号

    • sed 's@^#@@g' /etc/inittab

  • 删除牟文建中开头的#及后面的空白字符,但要求#后必有空白字符

    • sed -r 's@^#[[:SPACE:]]+@@g' /etc/inittab

  • 删除某文件中一空白字符,后面跟#的所在行中的开头空白及#

    • sed -r 's@^[[:SPACE:]] +#@@g' /etc/inittab

  • 去除一个文件路径的目录名称

    • echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\ | @g'

       

你可能感兴趣的:(sed)