Bash Scripting - Saída de texto dentro de tags

0

Eu tenho um arquivo que precisa levar o conteúdo dentro de tags. Por exemplo:

<Model500>
ABC
BCD 
CDE
</Model500>


<Model500>
123
234
345
</Model500>

Gostaria de extrair o conteúdo dentro de

<Model500>
</Model500>

usando 'sed'

Então, seria parecido com

ABC
BCD
CDE

123
234
345

Eu tentei isso usando

sed -e 's/<Model>\,/</Model>/p' file.txt

Mas os caracteres especiais estão causando problemas. Algum conselho? Obrigado.

    
por keyboard_solo 12.09.2016 / 22:41

2 respostas

1

Se a entrada for XML, é melhor usar uma ferramenta específica para XML.

Método 1

Um método para incluir um / em um regex sed é escapar com uma barra invertida:

$ sed -ne '/<Model500>/,/<\/Model500>/p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

A expressão /<Model500>/,/<\/Model500>/ especifica um intervalo de linhas. O intervalo começa com uma linha que corresponde a <Model500> e termina com uma linha que corresponde a <\/Model500> . Como estamos especificando um intervalo, não um comando substituto, a expressão não inicia com s .

Método 2

Se você não quiser escapar, use um delimitador diferente:

$ sed -ne '\|<Model500>|,\|</Model500>|p' file.txt
<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

Aqui, usamos | como delimitador. Para sinalizar que um delimitador diferente de / está sendo usado em um intervalo, o primeiro deve ter um escape: \| .

    
por 12.09.2016 / 22:56
0

Como a string </Model> contém o caractere / , você precisa escapar da expressão sed ou usar um caractere diferente para delimitar sua expressão sed. Felizmente sed pode usar qualquer caractere único para delimitar a expressão, então você simplesmente tem que escolher um que não apareça na sua entrada.

Em uma nota mais geral, sed provavelmente não é a melhor escolha para a tarefa em questão. Parece que você está analisando um arquivo XML, então você provavelmente deveria aproveitar uma biblioteca construída para análise XML em vez de hackear algo junto com o sed. Veja este post para obter uma descrição de por que isso é má ideia.

    
por 12.09.2016 / 22:56