sed '5i\n\n\n' myfile 首先插入 \n 作为文字 n,另外两个 \n\n 作为新行插入,是否可以插入所有 3 个新行?

Jul*_* TR 4 sed gnu

我正在编写一个 Bash 脚本,当使用 GNU sed 向文件插入行时,第一个新行作为文字 n 插入,而其余的作为新行插入。命令是这样的:

sed '5i\n\n\n' myfile
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

n


Run Code Online (Sandbox Code Playgroud)

正如所见,输出中的第一行包含一个“n”,它应该没有,我对这种行为有什么遗漏?是否可以使 sed 仅插入带有 '\n' 的新行?谢谢你。

Mic*_*mer 11

标准sed的插入

5i\
text here...
Run Code Online (Sandbox Code Playgroud)

(包括反斜杠)。GNU sed 有一个扩展,它接受与i命令在同一行上的文本,但如果在i它后面有一个反斜杠,它会像往常一样被解释为结束命令——尽管它仍然不会强迫你移动到一个新行,要么。您可以使用

5i\\n\n\n
Run Code Online (Sandbox Code Playgroud)

一起做。这不是转义的反斜杠,而是相邻的两种不同类型的反斜杠。这种行为似乎没有记录在案,但在命令和版本之间是一致的。


您可能会发现使用另一个 GNU 扩展更清楚:

sed -e '5i\' -e '\n\n\n'
Run Code Online (Sandbox Code Playgroud)

将命令和文本分成两个-e参数以避免这种歧义。

  • @NasirRiley 不,这很酷,谢谢,我已经接受了这个答案,无需检查代码本身,答案完美无缺。 (2认同)