cria um arquivo .xml com dados do bash

2

Estou tentando criar um arquivo .xml, o comando bash precisa copiar esse bloco de código e substituir o atributo CITY-FROM-TEXT-FILE-LINE-1 de city.txt (uma cidade por linha)

<ss:Row ss:Height ="22">
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">CITY-FROM-TEXT-FILE-LINE-1</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">CALIFORNIA</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">CA</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
            <ss:Cell>
               <ss:Data ss:Type="String">xx</ss:Data>
            </ss:Cell>
        </ss:Row>
    
por eddie 05.02.2012 / 18:50

2 respostas

0

Crie um arquivo template.xml contendo o texto acima

IFS=$(echo -en "\n\b") ; for C in 'cat city.txt' ; do sed s/CITY-FROM-TEXT-FILE-LINE-1/$C/ template.xml ; done > cities.xml

Comandos usados

  • cat ; concatenar um arquivo para STDOUT
  • sed ; editor de fluxo

Também usamos o bash padrão para o mecanismo de loop e o redirecionamento para um arquivo.

Para ler mais, recomendo;

  • Guia de script avançada do bash (também é bom para iniciantes)
  • Esculpindo texto com grep, sed e awk (uma introdução a três das mais úteis ferramentas de processamento de texto no Unix )
por Adrian 05.02.2012 / 20:34
0

Não há informações suficientes para saber exatamente o que você deseja, mas vou tentar adivinhar, e isso pode ajudar. Se você tivesse um arquivo chamado cities.txt que continha:

xx
CITY-FROM-TEXT-FILE-LINE-1
CALIFORNIA
CA
xx

e, em seguida, você executou o comando awk nessa entrada:

awk 'BEGIN{print "<ss:Row ss:Height =\"22\">"}{printf "  <ss:Cell>\n    <ss:Data ss:Type=\"String\">%s</ss:Data>\n  </ss:Cell>\n",$0}END{print "</ss:Row>"}' < cities.txt

então você deveria a saída:

<ss:Row ss:Height ="22">
  <ss:Cell>
    <ss:Data ss:Type="String">xx</ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String">CITY-FROM-TEXT-FILE-LINE-1</ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String">CALIFORNIA</ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String">CA</ss:Data>
  </ss:Cell>
  <ss:Cell>
    <ss:Data ss:Type="String">xx</ss:Data>
  </ss:Cell>
</ss:Row>

Isso pode não responder diretamente à sua consulta, mas esperamos que você tenha uma maneira possível (de muitas) para começar.

    
por sladen 05.02.2012 / 20:40