Mesclar conteúdo de um arquivo em outro arquivo substituindo uma função

2

Estou trabalhando em um script de shell que está obtendo dados de outro programa e estou usando esse valor de variável para ler o conteúdo do arquivo que continua anexando a arquivos diferentes após algumas modificações:

Abaixo está um exemplo:

readonly file_location=$location
readonly client_id = $id
readonly client_types = $type_of_client

Aqui, o valor $ location, $ id e $ type_of_client está sendo passado de outro programa. Abaixo está um exemplo:

$ location será o nome do caminho completo como este: /home/david/data/12345678 $ id será o número: 120 $ type_of_client será espaço separted word: abc def pqr

Agora, dentro desta localização /home/david/data/12345678 , tenho arquivos como este: abc_lop.xml , def_lop.xml e pqr_lop.xml . O significado _lop.xml será sempre o mesmo, para que possamos codificar isso. Precisamos apenas iterar client_types variable e criar um nome de arquivo como mostrado acima e anexar cabeçalho e rodapé a esse arquivo e criar um novo. Então eu consegui esta parte funcionando bem com o código abaixo:

#!/bin/bash

readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client

client_value='cat "$file_location/client_$client_id.xml"'

for word in $client_types; do
    fn="${word}"_new.xml
    echo "$word"
    echo '<hello_function>' >>"$fn"
    echo '<name>Data</name>' >>"$fn"
    cat "$file_location/${word}_lop.xml" >>"$fn"
    echo '</hello_function>' >>"$fn"
done

Agora, a segunda coisa que preciso fazer é: Eu tenho um outro arquivo xml que é client_$client_id.xml . Preciso copiar meu arquivo _new.xml gerado em client_$client_id.xml em um determinado local. Abaixo está minha client_120.xml em que preciso adicionar meu arquivo _new.xml gerado. Eu preciso substituir todo função abaixo com o meu arquivo _new.xml gerado.

<?xml version="1.0"?>

<!-- some data -->

        <function>
            <name>TesterFunction</name>
            <datavariables>
                <name>temp</name>
                <type>string</type>
            </datavariables>
            <blocking>
                <evaluate>val = 1</evaluate>
            </blocking>
        </function>
    </model>
</ModelMetaData>

Então, se este for meu arquivo _new.xml gerado: Eu preciso copiar todo esse arquivo para o arquivo acima e substituir todo o TesterFunction por ele.

<hello_function>
<name>Data</name>
<Hello version="100">

<!-- some stuff here -->

</Hello>
</hello_function>

A saída final será assim:

<?xml version="1.0"?>

<!-- some data -->

    <hello_function>
    <name>Data</name>
    <Hello version="100">

    <!-- some stuff here -->

    </Hello>
    </hello_function>
    </model>
</ModelMetaData>
    
por david 16.09.2015 / 16:00

1 resposta

1

Isso deve ser feito:

#!/bin/bash

readonly file_location="$location"
readonly client_id="$id"
readonly client_types="$type_of_client"

## Define the header and footer variables
header='<hello_function>
<name>Data</name>'
footer='</hello_function>'

for word in $client_types
do
    ## Concatenate the header, the contents of the target file and the
    ## footer into the variable $file.
    file=$(printf '%s\n%s\n%s' "$header" "$(cat "$file_location/${word}_lop.xml")" "$footer")

    ## Edit the target file and print
    perl -0pe "s#<function>\s*<name>DUMMYPMML.+?</function>#$file#sm"  model_"$client_id".xml
done
    
por 16.09.2015 / 16:03