将文件中的模式替换为第二个文件中的模式

将文件中的模式替换为第二个文件中的模式

我想用另一个文件中的数据替换文件的部分数据。

假设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 中而不是在设置部分中时,我们才会看到此语句。

相关内容