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
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.)
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.)