1. 多行操作Next

    allen@allen:~$ cat test.txt
    Name:Tom,
    Mail:Tom@gmail.com
    Name:Jerry,
    Mail:Jerry@gmail.com
    allen@allen:~$ sed -n '/Name/ {N;L}' test.txt
    Name:Tom, Mail:Tom@gmail.com
    Name:Jerry, Mail:Jerry@gmail.com

    allen@allen:~$ cat num.txt
    111
    222
    222
    222
    333
    allen@allen:~$ sed -n '/222/ {N;l}' num.txt
    222\n222$
    222\n333$
    allen@allen:~$ sed -n '/222/ {N;L}' num.txt
    222 222
    222 333

  2. 多行操作print

    allen@allen:~$ cat demo.txt
    aaa
    bbb
    ccc
    ddd
    eee
    fff

    allen@allen:~$ sed '/.*/N' demo.txt 

    #sed命令使用了N读取下一行,新读取的内容与原有的内容直接使用\n分隔。
    aaa
    bbb
    ccc
    ddd
    eee
    fff
    allen@allen:~$ sed '/.*/N;L' demo.txt

    #sed命令使用了N读取下一行,L表示显示模式空间的内容,即aaa,bbb,同时sed命令的自动输出功能会把源文件内容现实出来,即aaa,bbb。
    aaa bbb
    aaa
    bbb
    ccc ddd
    ccc
    ddd
    eee fff
    eee
    fff
    allen@allen:~$ sed '/.*/N;P' demo.txt

    #sed命令使用了N读取下一行追加至行尾,现在模式空间中的内容为aaa\nbbb,而P指令的作用是打印模式空间中的第一部分内容知道\n结尾,即仅打印aaa,这时sed自动输出功能输出aaa,bbb。(sed自动输出会将\n输出为换行)。依此类推,读取第三行ccc,N将ddd追加至行尾,P打印\n前的内容,同时sed命令也会自动输出。
    aaa
    aaa
    bbb
    ccc
    ccc
    ddd
    eee
    eee
    fff
    allen@allen:~$ sed '/.*/N;p' demo.txt

    #sed命令的原理类似于第三个sed命令,但p打印时,\n看作是回车换行,所以打印出来的是aaa回车bbb。
    aaa
    bbb
    aaa
    bbb
    ccc
    ddd
    ccc
    ddd
    eee
    fff
    eee
    fff

  3. 多行删除操作Delete (D)

    d指令为删除命令,其作用是删除模式空间中的内容并读入新的输入行,而如果sed 在d指令后还有多条指令,则余下的指令将不在执行,而三返回第一条指令对心读入行进行处理。

  4. Hold (h,H), Get (g,G)

    模式空间是存放当前输入行的缓冲区。除此之外,sed还有一个称为保持空间(hold space)的缓冲区。模式空间的内容可以复制到保持空间,保持空间的内容同样可以复制到模式空间,还有一组sed命令用于在两者之间移动数据。

    Hold(h|H) 将模式空间的内容复制或追加到保持空间。

    Get(g|G) 将保持空间的内容复制或追加到模式空间。

    Exchange(x) 交换保持空间与模式空间的内容。

    allen@allen:~$ cat demo.txt
    aaa
    bbb
    ccc
    ddd

    allen@allen:~$ sed '/aaa/ {h;d};/ccc/ {G}' demo.txt
    bbb
    ccc
    aaa
    ddd