Reemplace el patrón en el archivo con el patrón en el segundo archivo

Reemplace el patrón en el archivo con el patrón en el segundo archivo

Quiero reemplazar parte de los datos de un archivo con datos de otro archivo.

Supongamos file1que tiene datos como se escribe a continuación y file2tiene algunos datos que quiero almacenar y reemplazar file1desde file2el patrón inicial: // +++ CUSTOMIZATION SETTINGS START +++y el patrón final // +++ CUSTOMIZATION SETTINGS END +++:.

En file1:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WE WILL BE ON LEAVE FOR TODAY 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

En file2:

MANISH
MADHVI

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

NISHA
TUSHAR

Como file3salida:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

Respuesta1

$ 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

Explicación

awkimplícitamente recorre los archivos línea por línea. En este caso, hacemos que recorra primero el archivo 2 y luego el archivo 1.

  • /SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}}

    La sección de configuración del archivo 2 se captura en la variable a.

  • FNR==NR{next}

    Si todavía estamos leyendo el archivo 2, omita el resto de los comandos y salte a la siguiente línea de entrada.

  • /SETTINGS START/{print substr(a,2)}

    Si llegamos aquí, estamos procesando el archivo1. Cuando veamos el inicio del apartado de configuración imprimimos la cadena que tenemos guardada en la variable a.

  • /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}

    Si estamos en la sección de configuración del archivo1, omita el resto de los comandos y vaya a la siguiente línea de entrada.

  • 1

    1es la abreviatura críptica de awk para imprimir la línea actual. Solo llegamos a esta declaración si estamos en el archivo 1 pero no en la sección de configuración.

información relacionada