sed 可以将带有换行符的文本插入到其他文本中吗?

Can sed insert text with newlines into other text?

如果 B 有换行符,sed 是否能够将文本 B 插入到文本 A 的中间?

我找到了如何使用 sed 将文本插入到其他文本中间的示例 - 但我能找到的唯一此类示例是插入的文本是一行的。

如果插入的文本有换行符,我无法确定将文本插入其他文本的语法(甚至可能性)。有人可以帮忙吗?

我没有嫁给 sed。我对任何解决方案都满意,但我也很好奇这是否可以用 sed 完成。

这是我到目前为止尝试过的方法:

>c1="$(cat f1)"
>echo "$c1"
a
b
c
d
>c2="$(cat f2)"
>echo "$c2"
x
y
z
>echo "$c1" | sed "s,^c,c\n"${c2}","
sed: -e expression #1, char 9: unterminated `s' command
>echo "$c1" | sed "s,^c,c\n${c2},"
sed: -e expression #1, char 9: unterminated `s' command

谢谢。

在您的特定情况下,您可以使用 sedr 命令读取文件并将其内容添加到输出流:

sed '/^c/r f2' f1

这应该等同于您的 echo "$c1" | sed "s,^c,c\n"${c2}"," 尝试,在以 c.

开头的行之后添加 f2 文件的内容

请注意,我不使用 substitute 命令,而是使用 /^c/ 测试每一行,并为每一行匹配执行 read 命令。