如何用sed插入多行


10

我要添加这个

#this 
##is my 
text

行前

the specific line 

我试过了

sed -i '/the specific line/i \
#this 
##is my 
text
' text.txt

但只会添加“文本”。

我也试图与不同的组合\" ",但毫无效果。

Answers:


4

使用换行符:

% sed -i '/the specific line/i #this\n##is my\ntext' foo

% cat foo
#this
##is my
text
the specific line

9

您在某些行的末尾缺少结尾的反斜杠(并且您要插入的最后一行的末尾有一个强制的换行符):

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

1

当替换字符串包含换行符和空格时,您可以使用其他内容。我们将尝试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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.