acrescente algumas strings no início e no final da string provenientes do arquivo lido

1

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 e acrescentar algumas coisas dentro desses dados no início e no final:

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: %código%
  • $ id será o número: /home/david/data/12345678
  • $ type_of_client será a palavra separted do espaço: 120

Agora, dentro desta localização abc def pqr , tenho arquivos como este: /home/david/data/12345678 , abc_lop.xml e def_lop.xml . O significado pqr_lop.xml será sempre o mesmo, para que possamos codificar isso. Nós só precisamos iterar _lop.xml variable e fazer um nome de arquivo como mostrado acima e ler todo o arquivo em uma String por enquanto (ou pode ser se houver alguma outra maneira melhor). Eu comecei a trabalhar como mostrado abaixo:

#!/bin/bash

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

for word in $client_types
do
    echo $word
    file_value='cat "file_location"/"$word"_lop.xml'
    echo $file_value
done

Agora preciso fazer algo especial, como manipulação de string no shell script, e não sei como podemos fazer isso. Agora, qualquer que seja o valor que lermos desses arquivos, eu preciso acrescentar algo no topo dele e algo no final dele em todos os arquivos que estamos lendo. Eu preciso fazer exatamente a mesma coisa mostrada abaixo:

Por exemplo: se o arquivo client_types for assim depois de visualizá-lo usando abc_lop.xml :

<Hello version="100">

<!-- some stuff here -->

</Hello>

Eu preciso fazer assim:

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

<!-- some stuff here -->

</Hello>
</hello_function>

Como você pode ver, adicionei isso na parte superior vi e adicionei isso na parte inferior <hello_function><name>Data</name> . Como podemos fazer isso no script de shell?

Portanto, em geral, </hello_function> deve imprimir acima dos valores indicados para cada um desses echo $file_value :

#!/bin/bash

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

for word in $client_types
do
    echo $word
    file_value='cat "file_location"/"$word"_lop.xml'
    // may be do something here?
    echo $file_value // this should print out appended string value both at top and bottom.
done

Cada um desses arquivos XML terá menos de 10 MB, com certeza.

    
por david 15.09.2015 / 23:56

1 resposta

2

Não há necessidade de ler em uma variável, se tudo o que você está fazendo é enviar os dados. Para o seu loop principal:

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

Naturalmente, isso gera a concatenação de todos os arquivos modificados, que podem ser difíceis de separar posteriormente. Mas funciona.

Editar: para enviar arquivos separados:

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

Dependendo, claro, do que você quer em cada arquivo.

    
por 16.09.2015 / 00:00