Como posso imprimir todas as linhas entre duas linhas, começando com um padrão para a primeira linha e terminando com outro padrão para a última linha?
Atualizar
Eu acho que foi um erro mencionar que este documento é HTML. Eu pareço ter tocado um nervo, então esqueça isso. Eu não estou tentando analisar HTML ou fazer nada com isso além de imprimir uma seção de um documento de texto.
Considere este exemplo:
aaa
bbb
pattern1
aaa pattern2
bbb
ccc
pattern2
ddd
eee
pattern1
fff
ggg
Agora, quero imprimir tudo entre a primeira instância de pattern1
, começando no início de uma linha, e pattern2
, começando no início de outra linha. Quero incluir as linhas pattern1
e pattern2
na minha saída, mas não quero nada depois da linha pattern2
.
pattern2
é encontrado em uma das linhas da seção. Eu não quero parar por aí, mas isso é facilmente corrigido indicando o início da linha com ^
.
pattern1
aparece em outra linha após pattern2
, mas não quero ver nada disso. Estou apenas procurando por tudo entre a primeira instância de pattern1
e a primeira instância de pattern2
, inclusive.
Encontrei algo que quase me leva até lá usando sed
:
sed -n '/^pattern1/,/^pattern2/p' inputfile.txt
... mas isso começa a ser impresso novamente na próxima instância de pattern1
Eu posso pensar em um método usando grep -n ... | cut -f1 -d:
duas vezes para obter os dois números de linha, em seguida, tail
e head
para obter a seção que eu quero, mas estou esperando por uma maneira mais clara. Talvez awk
seja uma ferramenta melhor para essa tarefa?
Quando eu começar a trabalhar, espero amarrar isso em um git
hook. Eu também não sei como fazer isso, mas ainda estou lendo e pesquisando:)
Obrigado.