6.1 How sed Works
sed 维护两个data buffer
active pattern sapce
auxiliary hold space
sed从输入读取一行,移除结尾的newline,将其放入pattern space,然后执行命令。
当命令执行完毕,除非指定了-n选项,否则pattern space的内容,将被打印到输出,并添加一个结尾newline,如果它被删除的话。
除非使用特殊的命令,否则pattern space在两个cycle之间被删除。而hold space则长存。
6.3 Multiline techiniques - Using D G H N P commands
D 删除pattern space到第一个新行,然后开始新的cycle
G 将hold space 追到 pattern space,中间添加一个newline
H 将 pattern space 追加到 hold space,中间添加一个newline
N pattern space添加一个新行,然后在从输入文件读取一行,追加到pattern space
P 打印pattern space直到第一个newline
b
无条件跳转
t
有条件跳转,条件是s命令匹配成功
T
有条件跳转,条件是s命令匹配不成功
1 2 3 4 | $ printf '%s\n' a1 a2 a3 | sed -E '/1/bx ; s/a/z/ ; :x ; y/123/456/' a4 z5 z6 |
如果跳转没有指定label,则开始一个新的cycle,在开始新的cycle之前,先打印pattern space。
参考
sed manaul