
我想用另一個文件中的資料替換文件的部分資料。
假設file1
有如下所示的數據,並且file2
有一些我想要儲存和替換起始模式:和結束模式:的file1
數據。file2
// +++ CUSTOMIZATION SETTINGS START +++
// +++ CUSTOMIZATION SETTINGS END +++
在file1
:
ANJALI
NISHA
// +++ CUSTOMIZATION SETTINGS START +++
WE WILL BE ON LEAVE FOR TODAY
// +++ CUSTOMIZATION SETTINGS END +++
PREETI
MONA
在file2
:
MANISH
MADHVI
// +++ CUSTOMIZATION SETTINGS START +++
WELCOME ALL
// +++ CUSTOMIZATION SETTINGS END +++
NISHA
TUSHAR
作為file3
輸出:
ANJALI
NISHA
// +++ CUSTOMIZATION SETTINGS START +++
WELCOME ALL
// +++ CUSTOMIZATION SETTINGS END +++
PREETI
MONA
答案1
$ awk '/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}} FNR==NR{next} /SETTINGS START/{print substr(a,2)} /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next} 1' file2 file1
ANJALI NISHA
// +++ CUSTOMIZATION SETTINGS START +++
WELCOME ALL
// +++ CUSTOMIZATION SETTINGS END +++
PREETI MONA
解釋
awk
隱式逐行循環遍歷文件。在這個例子中,我們先循環遍歷 file2,然後再遍歷 file1。
/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}}
file2 中的設定部分被捕獲在變數 中
a
。FNR==NR{next}
如果我們仍在讀取 file2,請跳過其餘命令並跳到下一行輸入。
/SETTINGS START/{print substr(a,2)}
如果我們到達這裡,我們正在處理 file1。當我們看到設定部分的開頭時,列印我們保存在變數中的字串
a
。/SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}
如果我們位於 file1 的設定部分,請跳過其餘命令並轉到下一個輸入行。
1
1
是 awk 列印目前行的神秘簡寫。只有在 file1 中而不是在設定部分時,我們才會看到此語句。