在 sed 文档中,我们读到“sed 的工作原理是仅对输入进行一次传递”。
我想编写一个 sed 脚本(像这样运行:)sed -f my_script.sed
,它执行多个操作,包括脚本中先前执行的操作。
是否可以对编辑后的流内容执行第二次(或第n次)传递?
例如:
- 初始流内容:
titi
- 第一次通过后流内容:
/titi/ i (
/titi/ a )
$ cat test.txt
(
titi
)
- 又经过一次:
s/(/{/g
s/)/}/g
我希望输出是
$ cat test.txt
{
titi
}
这只是一个示例,表明我想执行对单个.sed
脚本内的先前命令有影响的流版本。
答案1
sed
只获得一次输入流传递。这在手册页中有明确说明(至少在 Fedora 33 上是这样)。
每当我必须做这样的事情时,我都会将 的输出通过管道传输到 的sed
第二个实例中以sed
进行后续编辑。