Se o arquivo for um arquivo XML bem formado e você quiser extrair os <text>
nodes em arquivos separados, o seguinte fará isso usando XMLStarlet:
#!/bin/sh
infile="$1"
xmlstarlet sel -t -v '//text/@id' -nl "$infile" |
while read id; do
xmlstarlet sel -t --var id="'$id'" -v '//text[@id = $id]' "$infile" >"$id.txt"
done
Dado o nome do caminho de um arquivo como o seguinte na linha de comando,
<?xml version="1.0"?>
<root>
<text id="cade2296-1">
The first text, called "cade2296-1".
</text>
<text id="cafr3062-1">
The second text, called "cafr3062-1".
</text>
</root>
... isso criaria os dois arquivos, cade2296-1.txt
e cafr3062-1.txt
, no diretório atual, com o conteúdo das duas tags <text>
no arquivo original.
Os nomes dos arquivos são retirados do atributo id
das tags <text>
. Esses valores id
são primeiro extraídos do XML e usados no loop para extrair os valores relevantes da tag.
A alteração de -v
para -c
na invocação do XMLStarlet dentro do loop daria a você uma cópia das tags <text>
XML, e não apenas os dados na tag.