將文件中的模式替換為第二個文件中的模式

將文件中的模式替換為第二個文件中的模式

我想用另一個文件中的資料替換文件的部分資料。

假設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 中而不是在設定部分時,我們才會看到此語句。

相關內容