Semelhante, mas não exatamente como Como selecionar a primeira ocorrência entre dois padrões, incluindo-os ... dado este arquivo de entrada:
something P1 something
content1
content2
something P1 something
content3
content4
Eu preciso apenas desta saída:
something P1 something
content1
content2
Uma solução awk:
Isso imprimirá a primeira linha correspondente
/^something P1 something$/
e todas as linhas até a próxima linha correspondente a esse padrão (mas não incluindo a referida linha) ou o final do arquivo.Isto é o que eu suspeito que você realmente quer:
Para imprimir o primeiro bloco:
ou para imprimir o 2º:
e assim por diante. Sem uma declaração clara de requisitos, é apenas um palpite.
awk
Uma solução geral para o bloco
i
padrão em awk é:Explicação:
Se o padrão que importa é apenas P1, use:
Para uma execução mais rápida, saia quando o bloco terminar:
Se você quiser uma correspondência literal (não um padrão), use:
sed
Para ir da primeira instância de um padrão para a próxima instância de um padrão, você pode fazer no GNU sed:
Pode haver algumas linhas antes da primeira
something P1 something
.O script para (rápido) quando o segundo padrão é encontrado.
Como ambos os padrões (início e fim) são iguais, podemos reduzir o comando para:
E para torná-lo mais portátil, use:
Resultados:
Usando o editor Gnu sed com construção não Posix Q :
Com apenas construções Posix, fazemos isso:
Com Perl:
Ainda outra: