我正在尝试在给定模式之前插入文件内容
这是我的代码:
sed -i "" "/pattern/ {
i\\
r $scriptPath/adapters/default/permissions.xml"
}" "$manifestFile"
它添加路径而不是文件内容。
有什么想法吗?
答案 0 :(得分:20)
为了在模式之前插入文本,您需要在读入文件之前将模式空间交换到保留空间。例如:
sed "/pattern/ {
h
r $scriptPath/adapters/default/permissions.xml
g
N
}" "$manifestFile"
答案 1 :(得分:4)
只需删除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
答案 2 :(得分:1)
我使用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
答案 3 :(得分:0)
如果模式位于最后一行,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
答案 4 :(得分:0)