多行操作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.comallen@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多行操作print
allen@allen:~$ cat demo.txt
aaa
bbb
ccc
ddd
eee
fffallen@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多行删除操作Delete (D)
d指令为删除命令,其作用是删除模式空间中的内容并读入新的输入行,而如果sed 在d指令后还有多条指令,则余下的指令将不在执行,而三返回第一条指令对心读入行进行处理。
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
dddallen@allen:~$ sed '/aaa/ {h;d};/ccc/ {G}' demo.txt
bbb
ccc
aaa
ddd
转载于:https://blog.51cto.com/masters/1532678