Eu não tenho certeza de como não incluir o foe2 apenas pelo awk, então eu uso o sed também.
$ awk '/foe/,/foe2/' file | sed '$ d'
O arquivo é organizado em entradas do formulário:
foe,
1....
2....
3....
foe2,
1....
2....
Todos os subitens começam com quatro espaços e, em seguida, com texto ou item numérico. Todas as entradas como inimigo começam sem espaço. Assim, a próxima entrada começa quando um elemento não tem espaço em branco no início da linha. O arquivo inteiro é assim e cada entrada pode ter tamanho diferente.
Eu quero um regexp que produza uma entrada como foe e os subitens (mas não inclua o próximo item, foe2).
Eu não tenho certeza de como não incluir o foe2 apenas pelo awk, então eu uso o sed também.
$ awk '/foe/,/foe2/' file | sed '$ d'
$ awk '/foe2/{exit} /foe/ {p=1} p' sample.txt
Isto imprimirá cabeçalhos e subitens foe, excluindo o próximo cabeçalho, isto é, foe2
Você pode fazer isso de várias formas.
Usando sed
:
sed '/foe/,/foe2/{/foe2/!b};d' file
Usando awk
:
awk '/foe2,/{p=0}/foe,/{p=1}p' file
Usando perl
:
perl -lne 'if(/foe/.../foe2/ and $_!~/foe2/){print}' file
Se você quiser print until next entry (whatever word that is)
, deve ter certeza de que sua estrutura de entrada não muda:
awk '/^[a-z]/{p=0}/foe,/{p=1}p' file
Tags regular-expression