sed学习笔记-3(命令DPhHgGxb

发布时间:2019-07-31 09:40:57编辑:auto阅读(1667)


    0606:
    多行删除
    d删除模式空间内容,导致读入新行
    D删除模式空间第一行(直到第一个被嵌入的换行符)重点:它不会读入新行,相反它返回到脚本的顶端,将这些指令应用于模式空间剩余的内容!
    P打印模式空间的第一行,用法见sed学习笔记-2的多行模式替换
    例:保留一个空行
    [root@localhost upload]# cat 1
    a
    b
    c
    d
    e
    [root@localhost upload]# cat 1.sed
    /^$/ {
    N
    /^\n$/D
    }
    [root@localhost upload]# sed -f 1.sed 1
    a
    b
    c
    d
    e
    保持空间:
    h复制模式空间内容到保持空间  覆盖
    H复制模式空间内容到保持空间  追加
    g复制保持空间内容到模式空间  覆盖
    G复制保持空间内容到模式空间  追加
    x交换两个空间的内容
    例1:
    [root@localhost upload]# cat 1
    aaaaaaaaaaa
    bbbbbbbbbbbbb
    cccccccccccc
    dddddddddddddd
    eeeeeeeeeeeeee
    ffffffffffff
    [root@localhost upload]# cat 1.sed
    #本脚本中对于空行的操作一定要在脚本的顶部
    $ {
        /^$/! {
            H
            s/.*//
        }
    }
    /^$/! {
    H
    d
    }
    /^$/ {
    x
    s/^\n/<p>/
    s/$/<\/p>/
    }
    [root@localhost upload]# sed -f 1.sed  1
    <p>aaaaaaaaaaa
    bbbbbbbbbbbbb
    cccccccccccc</p>
    <p>dddddddddddddd
    eeeeeeeeeeeeee</p>
    <p>ffffffffffff</p>
    --------------------------------------------------------------------
    流程控制命令:
    b
    1、"b<空格>标签" 跳转到指定标签下的语句(冒号开头的标签)
    2、"b不代标签参数" 跳转到脚本结尾(不执行脚本剩下语句)
    t
    1、"t<空格>标签"如果上一个语句成功执行,则执行指定标签下的语句
    2、"t不代标签参数" 跳转到文件结尾(不执行脚本剩下语句)
    例:随便一个过程
    :begin
    s/a/A/
    /a/b begin
    /B/
    t end
    b
    :end
    D



    -------------

    n和N不打使执行权限回到顶部,而是只是单纯的读取下一行、追加下一行到当前的模式空间,从下一个命令接着处理。

    2.txt

    [root@centos-6 bak]# sed -f 2.sed -n 2.txt
    ccc
    aaaa
    cccc
    aaac



    N

    [root@centos-6 bak]# cat 2.sed
    #!/bin/sed -f
    /c/ {
        s/a/A/g
        :notfindpath
        N
        p
    }

    n

    [root@centos-6 bak]# sed -f 2.sed -n 2.txt
    aaaa
    aaac


关键字