我正在编写一个 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参数以避免这种歧义。