如何用 sed 一次性插入某物

How to insert sth with sed just once

我正在尝试用多行块替换输入文件中的第一个空行,即。 e.来自

one
two

three
four

five
six

我要创作

one
two

foo

three
four

five
six

为此,我尝试了这个 sed 脚本:

sed '/^$/i\
\
foo'

但是它在 /each/ 空行处插入。

如何调整对 sed 的调用,使其仅在第一次出现空行时插入?有没有办法告诉 sed 现在剩下的输入应该只复制到输出?

我不想切换到 awk 或其他 shell 工具,例如循环或类似的 read。我只是对使用 sed 完成这项任务感兴趣。

我找到了一种方法,将 i 替换为 s 命令:

sed '0,/^$/s//\
foo\
/'

但我更喜欢使用 i 命令的解决方案,因为并不是我在搜索后想做的所有事情都可以很容易地用 s.

替换

您可以循环打印行直到文件末尾:

sed '/^$/{i\
\
foo
:a;n;ba}' file