Reemploop grande en XML

De acuerdo, entonces tengo este file xml. Necesito replace cada valor key con un valor de otro file (txt). Ambos files están orderados de modo línea 20 es decir, dentro del xml

<word key="ACTIVE" group="Service application" value="testvalue1"/> 

Dentro de mi segundo file, en la línea 20 estará

 testvalue2 

Estoy buscando algo que cambie el valor de testvalue1 a testvalue2

Esto debería funcionar.
Cargamos el nuevo file de valores, y luego procesamos el file xml reemplazando el valor anterior por el nuevo valor usando el número de línea como la key.

 awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' file2 file #OR working with regex groups: awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/(value=")(.*)(".+)/,"\\1"a[FNR]"\\3","g",$NF);print}' file2 file 

Pruebas:

 $ cat file <word key="ACTIVE" group="Service application" value="testvalue1"/> <word key="ACTIVE" group="Service application" value="testvalue2"/> <word key="ACTIVE" group="Service application" value="testvalue3"/> <word key="ACTIVE" group="Service application" value="testvalue4"/> <word key="ACTIVE" group="Service application" value=""/> $ cat file2 newvalue1 newvalue2 newvalue3 newvalue4 newvalue5 $ awk 'FNR==NR{a[FNR]=$0;next}{$NF=gensub(/value=".*"\/>/,"value=\""a[FNR]"\"\/>","g",$NF);print}' file2 file <word key="ACTIVE" group="Service application" value="newvalue1"/> <word key="ACTIVE" group="Service application" value="newvalue2"/> <word key="ACTIVE" group="Service application" value="newvalue3"/> <word key="ACTIVE" group="Service application" value="newvalue4"/> <word key="ACTIVE" group="Service application" value="newvalue5"/> 

Una secuencia de commands bash rápida:

 #!/bin/bash #set IFS to new line IFS=$'\n'; line_number=0 for line in $(cat file1.xml); do ((line_number++)) #get the value you want to replace value1=$(echo $line | grep -o -P 'value.{0,1000}' | cut -d '"' -f 2) #get the value you are replacing it with value2=$(sed "${line_number}q;d" file2.txt) #run the replace using sed sed -i 's/'"${value1}"'/'"${value2}"'/g' file1.xml done 

Tenga en count que esto no se ha probado, pero debería funcionar para sus necesidades.