我正在嘗試用來自第二個檔案(file2)的另一個檔案替換檔案(file1)中的一個塊。File2 包含多行,假設:
Print 1
Print 2
我正在使用這個命令:
file2="$(cat file2)"
sed -i "/Do_something/,/^}/c\
echo ${file2} " ${file1}
好訊息是它可以作業,但它會在一行中替換它。如何用多行替換?我試圖直接輸入變數,但它不起作用,它只適用于'echo'。此外,如果我添加雙引號,它不起作用。
uj5u.com熱心網友回復:
您不需要讀取file2shell 變數。只需sed使用r file命令完成它:
sed -e '/Do_something/,/^}/{/^}/!d; r file2' -e 'd;}' "$file1"
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -e '/Do_something/{:a;N;/^}/M!ba;r file2' -e 'd}' file1
用file2 的內容替換一個包含Do_something和另一個開始之間的行。}
NB 僅當兩個匹配項都匹配時才會發生替換,否則默認操作將保持檔案不變,即N命令將到達檔案末尾并列印模式空間的內容。
uj5u.com熱心網友回復:
在您可以做的每個 Unix 機器上的任何 shell 中使用任何 awk(未經測驗,因為您沒有提供我們可以測驗的示例輸入/輸出):
awk '
NR==FNR { new = (NR>1 ? new ORS : "") $0; next }
/Do_something/ { f=1 }
f && /^}/ { $0=new; f=0 }
!f
' file2 file1
以上假設如果您有Do_something輸入,那么您也將有一個后續},因為您的問題中沒有任何其他建議。
如果您想file1用該命令的輸出替換 的內容,則只需添加> tmp && mv tmp file1到命令的末尾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428524.html
上一篇:如何從grep獲得有意義的輸出?
