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

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

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

sed '5i\n\n\n' myfile

输出是这样的:

n


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

答案1

标准sed插入

5i\
text here...

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

5i\\n\n\n

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


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

sed -e '5i\' -e '\n\n\n'

命令和文本分为两个-e参数以避免歧义。

相关内容