d Delete pattern space. Start next cycle. 删除pattern space的内容,开始下一个循环. h、 H Copy/append pattern space to hold space. 复制/追加pattern space的内容到hold space. g、 G Copy/append hold space to pattern space. 复制/追加hold space的内容到pattern space. x Exchange the contents of the hold and pattern spaces. 交换hold space和pattern space的内容.
P:Print up to the first embedded newline of the current pattern space. (就是输出模式空间开头到第一个\n之间的内容)
D:If pattern space contains no newline, start a normal new cycle as if the d command was issued. Otherwise, delete text in the pattern space up to the first newline, and restart cycle with the resultant pattern space, without reading a new line of input. (是删除模式空间开头到第一个\n(含)之间的内容,并且控制流跳到脚本的第一条语句。这里一定要注意这句话“and restart cycle with the resultant pattern space, without reading a new line of input.”,即它是在不改变当前行号的情况下,从头执行的。) 这句话也充分的说明了,为什么很多人不愿意读中文翻译版书籍的原因。:-)
N:Add a newline to the pattern space, then append the next line of input to the pattern space. If there is no more input then sed exits without processing any more commands. (追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。如果没有下一个可处理的行,则退出)
1 2 3 4 5 6 7 8
d 删除资料。 D 删除 pattern space 内第一个 newline 字母 / 前的资料。
n 读入下一笔资料。 N 添加下一笔资料到 pattern space。
p 印出资料。 P 印出 pattern space 内第一个 newline 字母 / 前的资料。
1 2 3 4 5
test.txt # 1 2 3
1
sed -E -ne'/#/!p' test.txt
打印: 1 2 3
1 2
# 在mac os ; -r 和 mac里的-E 一样 , mac中没有-r sed -E -e :a -e '$!N;/#/!s/\n//;ta' -e 'P;D' test.txt
By default, each line of input is echoed to the standard output after all of the commands have been applied to it. The -n option suppresses this behavior.