我想给定模式使用的sed插入文件内容
这里是我的代码之前插入文件内容:
sed -i "" "/pattern/ {
i\\
r $scriptPath/adapters/default/permissions.xml"
}" "$manifestFile"
它添加了路径,而不是文件的内容。
任何想法?
我想给定模式使用的sed插入文件内容
这里是我的代码之前插入文件内容:
sed -i "" "/pattern/ {
i\\
r $scriptPath/adapters/default/permissions.xml"
}" "$manifestFile"
它添加了路径,而不是文件的内容。
任何想法?
为了在之前插入文字一个模式,您需要在读入文件之前将模式空间交换到保留空间。例如:
sed "/pattern/ {
h
r $scriptPath/adapters/default/permissions.xml
g
N
}" "$manifestFile"
只需删除i\\
。
例子:
$ cat 1.txt
abc
pattern
def
$ echo hello > 2.txt
$ sed -i '/pattern/r 2.txt' 1.txt
$ cat 1.txt
abc
pattern
hello
def
它插入后的模式。如何在它之前插入内容? – ridan
我用awk得到了这样的事情。相貌丑陋,但确实在我的测试的伎俩:
命令:
cat test.txt | awk '
/pattern/ {
line = $0;
while ((getline < "insert.txt") > 0) {print};
print line;
next
}
{print}'
的test.txt:
$ cat test.txt
some stuff
pattern
some other stuff
insert.txt:
$ cat insert.txt
this is inserted file
this is inserted file
输出:
some stuff
this is inserted file
this is inserted file
pattern
some other stuff
CodeGnome的解决方案不起作用,如果图案是在最后一行.. 所以我用3个命令。
sed -i '/pattern/ i\
INSERTION_MARKER
' $manifestFile
sed -i '/INSERTION_MARKER/r $scriptPath/adapters/default/permissions.xml' $manifestFile
sed -i 's/INSERTION_MARKER//' $manifestFile
该脚本必须加双引号,否则$ scriptPath不会被扩展。你能否解释为什么最后需要N? – hipe
@hipe r命令只将队列读入插入到输出流中。直到周期结束或读取下一行时,它才会真正读取任何内容。如果没有N,文件将不会被插入,直到模式空间被打印出来为止,使其作为追加而不是插入。它非常*非直观。 –
对我很好,谢谢你 – ridan