Pegue uma seção de um arquivo grande entre duas substrings conhecidas usando sed?

1

Eu tenho um arquivo XML muito grande sem quebras de linha.

É tão grande que é lento abrir e operar no Emacs ou em outro editor de texto. Mas eu só quero extrair uma pequena seção entre duas substrings conhecidas.

Eu não me importo em preservar a estrutura XML, só quero um pedaço de caracteres.

Este deveria ser um one-liner em sed, não?

Alguma ideia de como fazer isso? Tentei adaptar o link mas parece não funcionar quando canalizo meu arquivo para ele. (Funciona em exemplos de brinquedos, mas estou pensando que meu arquivo pode ser muito grande.)

    
por interstar 12.03.2016 / 19:45

2 respostas

2

Com o GNU grep:

Com frompattern e topattern na saída:

grep -o 'frompattern.*topattern' file.xml

Sem frompattern e topattern na saída:

grep -Po 'frompattern\K.*(?=topattern)' file.xml
    
por 13.03.2016 / 12:06
1

Bem, geralmente é fácil fazer com sed. Mas é sempre fácil fazê-lo com o awk:

awk '/frompattern/,/topattern/' your.xml > chunk.xml

Aqui os dois padrões são expressões regulares (como seria com sed). Se isso te desencorajar por qualquer motivo, você pode usar strings simples, se você souber onde elas estão:

awk '$x=="fromstring",$y=="tostring"' your.xml > chunk.xml

Aqui x e y são as posições de campo das strings que você deseja que sejam os sinais de barreira. (Mais pode ser feito com um pequeno esforço.)

    
por 12.03.2016 / 23:11

Tags