我想添加这个
#this
##is my
text
线前
the specific line
我试过这个
sed -i '/the specific line/i \
#this
##is my
text
' text.txt
但它只添加了“文本”。
\
我也尝试了和的各种组合," "
但没有任何效果。
答案1
您缺少某些行末尾的反斜杠(并且您要插入的最后一行末尾有过多的换行符):
sed -i '/the specific line/i \
#this\
##is my\
text' file
% cat file
foo
the specific line
bar
% sed -i '/the specific line/i \
#this\
##is my\
text' file
% cat file
foo
#this
##is my
text
the specific line
bar
答案2
使用换行符:
% sed -i '/the specific line/i #this\n##is my\ntext' foo
% cat foo
#this
##is my
text
the specific line
答案3
当替换字符串包含换行符和空格时,您可以使用其他内容。我们将尝试将的输出插入ls -l
到某个模板文件的中间。
awk 'NR==FNR {a[NR]=$0;next}
/Insert index here/ {for (i=1; i <= length(a); i++) { print a[i] }}
{print}'
<(ls -l) text.txt
当您想在某行后插入一些内容时,您可以移动命令 {print}
或切换到:
sed '/Insert command output after this line/r'<(ls -l) text.txt
您还可以使用 sed 在行前插入
sed 's/Insert command output after this line/ls -l; echo "&"/e' text.txt