多行替换

Mat*_*hid 9 sed

我花了很长时间试图弄清楚这一点。碰巧,我不再需要这样做了;我找到了另一种方法。但为了我的理智,我还是想知道答案。

sed用一些文本替换标记非常容易。我想不通的是如何sed插入一大块文本,具有复杂的格式,例如多行、制表符等。你是怎么做到的?是sed最好的东西还是什么?

Joh*_*han 3

如果您要将文本插入到名为 /tmp/insert.txt 的文件中的标记处,则可以按如下方式完成此任务:

sed '/MARKER/ r /tmp/insert.txt' < inputfile
Run Code Online (Sandbox Code Playgroud)

上面的 sed 命令将读取“inputfile”并查找 MARKER。当它找到它时,它将 /tmp/insert.txt 的内容插入到输出流中。

如果您想删除标记本身,请尝试以下操作:

sed '/MARKER/ {s/MARKER//; r /tmp/insert.txt
}' <inputfile
Run Code Online (Sandbox Code Playgroud)

请注意,“}”右大括号前面必须有一个新行。

与第一个命令一样,sed 将在带有 MARKER 的行上运行。它会将 MARKER 替换为空,然后读取 /tmp/insert.txt