Usando a linha de comando do Ubuntu para substituir o texto em um arquivo enorme

0

Eu tenho um enorme arquivo XML com o qual preciso trabalhar. No momento, o arquivo é apenas uma linha que contém cerca de 2 milhões de caracteres, o que representa 30.000 registros. Não há retornos de carro ou feeds de linha. O que eu preciso fazer é fazer cada registro em sua própria linha. Novos registros começam com <ROW> e terminam com </ROW> .

Eu tenho procurado por aqui e parece que as ferramentas para usar são: sed, tr ou awk, mas não tenho certeza qual é o mais apropriado.

Eu tentei isso sem sucesso:

tr '<ROW' '2 <ROW' <source.xml |tee destination.xml

Acima parece produzir algumas coisas bem estranhas, então eu devo estar bem longe daqui. talvez seja isso "<" personagem que é o problema?

    
por user299331 23.08.2014 / 00:32

2 respostas

3

Eu não acho que tr possa substituir seqüências de caracteres (apenas caracteres únicos de cada vez, embora possivelmente de um conjunto ) - eu tentaria algo como

sed 's|</ROW>|&\n|g' source.xml > destination.xml
    
por steeldriver 23.08.2014 / 00:40
0

Se possível (por exemplo, um documento xml válido), aconselho bastante uma ferramenta destinada a esse trabalho. por exemplo, xmllint (do pacote libxml2-utils).

xmllint --format filename.xml
    
por Shaun 23.08.2014 / 08:02