首页 > 代码库 > sed命令基础及高级用法

sed命令基础及高级用法

sed工具:sed是文本流编辑器,逐行对文件的内容进行处理

用法:sed [option] ... ‘script‘ inputfile...

选项:

    -n:静默模式,不输出模式空间的内容至屏幕

    -e:实现多点的功能编辑

    -f /path/from/script_file:从指定的文件读取编辑脚本

    -r:支持使用扩展的正则表达式

地址界面方法:

     (1)不给地址:对全文进行处理

     (2)一个地址(单地址)

        #:指定的行

        /pattern/:被引用处模式所能够匹配到的每一行:

     (3)地址范围   

        #,#:从第几行到第几行

        #,+#:显示从第几行开始向后的N行

        /pat1/,/pat2/:同时匹配2个参数,表示匹配这2个参数之间的所有行

        #,/pat1/:表示匹配这2个参数之间的所有行

     (4)~:步进

        #sed -n 1~2p test.txt(第一行开始,每次增加2行,意思就是显示奇数行)

        技术分享

        #sed -n 2~2p test.txt(从第二行开始显示,每次增加2行,意思就是显示偶数行)

        技术分享

编辑命令:

    d:删除被地址界定选定的内容

    p:显示(打印)模式空间中的内容到屏幕上,只打印符合条件的行,常于-n结合一起使用

    a \text:在行后面一行追加文本:支持使用\n实现多行追加;

       例: #sed ‘/^T/a \abc‘ a.txt

    i \text:在行前面一行追加文本:支持使用\n实现多行追加;

       例:# sed ‘/^T/i \abc‘ a.txt

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

       例:# sed ‘/^T/c \abc‘ a.txt

    w /path/to/somefile:保存模式空间中匹配到的内容至指定文件中;

    r /path/from/somefile:读取指定文件的文本游戏 至模式空间中匹配到的行后;

    =:为模式空间中的行,打印行号;

       例:#sed -n ‘/^T/=‘ a.txt

    q:一旦匹配到内容,则退出;不再往下匹配

    !:取反条件;对除了模式匹配到的行以外的行,进行操作;

    s///:支持使用其它分隔符,s@@@,s###

替换标记:

    g:行内全局进行替换:例:sed -n s@r..t@&er@p /etc/passwd  不带g选项,只替换每一行的第一次

    #:行内替换,替换第几次出现的匹配的内容,例:sed -n ‘s/Unix/UNIX/2p‘ a.txt,把第2次出现的Unix替换

    p:如果替换成功,则显示替换成功的行,与-n一起使用

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

练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符          #sed ‘s@^[[:space:]]\+@@‘ /boot/grub/grub.conf

练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

    #sed ‘s@^#[[:space:]]\+@@‘ /etc/fstab 

练习3echo一个绝对路径给sed命令,取出其基名:        

    #echo "/etc/sysconfig" | sed ‘s@[^/]\+$@@‘

高级编辑命令:

    h:把模式空间中的内容覆盖至保持空间中;

    H:把模式空间的内容追加至保持空间中;

    g:从保持空间取出数据覆盖至模式空间;

    G:从保持空间取出数据追加至模式空间;

    x:把模式空间中内容与保持空间中的内容进行互换操作;

    n:读取匹配到的行的下一行至模式空间;

    N:追加匹配到的行的下一行至模式空间;

    d:删除模式空间中的所有行;

    D:删除多行模式空间中的第一行;

    示例用法:

    #sed -n n;p FILE(最出偶数行)

    #sed 1!G;h;$!d test.txt(逆行显示文件内容)

    #sed $!N;$!D test.txt(读文件的后2)

    #sed $!d test.txt(最出文件最后一行)

    #sed G test.txt(在每一行下面加一个空白行)

    #sed /^$/d;G test.txt(每行间只保留一个空白行)

    #sed n;d test.txt(只显示奇数行)

    #sed -n 1!G;h;$p test.txt

本文出自 “激情燃烧的岁月” 博客,请务必保留此出处http://liuzhengwei521.blog.51cto.com/4855442/1883236

sed命令基础及高级用法