ILD

sed 4: Advanced sed: cycles and buffers
作者:YUAN JIANPENG 邮箱:yuanjp@hust.edu.cn
发布时间:2018-8-17 站点:Inside Linux Development

6 Advanced sed: cycles and buffers


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


6.4 Branching and Flow Control


无条件跳转


有条件跳转,条件是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


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.