Exclua as linhas seguindo o padrão de pesquisa até a linha em branco [duplicate]

1

Eu tenho usado o código a seguir com sucesso para encontrar 00 PROGRAM e excluir todas as linhas a seguir do bloco, ao longo dos muitos blocos no arquivo, mas manter a última linha do bloco se continha XYZ .

sed -n '/00 PROGRAM/,/^$/{/./{h;d}; x;/XYZ/p}' file 

Agora eu preciso do oposto. Eu preciso encontrar Group cat e excluir apenas as seguintes linhas do bloco até chegar à próxima linha vazia / vazia. O pattern inicial precisa permanecer no arquivo. A linha em branco deve permanecer no arquivo. Outras linhas de texto também precisam permanecer no arquivo. Alguém pode sugerir alterações nessa estrutura para que funcione ou sugerir uma nova linha de código?

Antes da execução do código:

 Group cat
 Group div
 Group member1
 Group member2
 Group select
      <empty line>
Common cat
Last update

Após o código ser executado:

Group cat
     <empty line>
Common cat
Last update

Em seguida, ele procurará a próxima correspondência de padrões e excluirá linhas nesse bloco e assim por diante.

    
por 985ranch 14.03.2018 / 01:57

1 resposta

2

O seguinte produz a saída desejada:

sed -e '/Group cat/,/^$/{//b' -e '/./d;}' file

Na primeira linha Group cat , o comando b será executado, ramificando-se ao final do script e imprimindo essa linha (a ação padrão).

Em todas as outras linhas até a próxima linha vazia, o comando d será executado, mas não na própria linha vazia.

    
por 14.03.2018 / 02:07

Tags