我想給定模式使用的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