torr, exclua da MarkA até, mas não inclua MarkB

1

Expressão no termo de matemática, gostaria de excluir uma região de [MarkA,MarkB) . Ou seja, a exclusão acontece logo quando a palavra-chave MarkA é encontrada, até a palavra-chave MarkB , mas não inclui essa linha (a linha que inclui MarkB palavra-chave é deixada intacta).

É possível fazer isso em sed ?

Diga que meu MarkA é ^3 e MarkB é 7 ,

$ seq 9 | sed '/^3/,/7/d'
1
2
8
9

Ele receberá meu 7 excluído, mas quero preservá-lo.

Para ser mais preciso, posso localizar com precisão MarkA (por exemplo, ^3 ), mas quero excluir até o primeiro MarkB . Ou seja,

seq 19 | sed '/^3/,/7/d'

é o que estou procurando se a linha 7 não for excluída.

    
por xpt 12.11.2015 / 18:22

1 resposta

2

Usando sed

Isso exclui o intervalo até, mas não inclui, a última linha do intervalo:

$ seq 9 | sed '/^3/,/7/{/7/p;d}'
1
2
7
8
9

Como antes, /^3/,/7/ seleciona todo o intervalo, incluindo /7/ . E, como antes, esse intervalo é excluído com o comando d . No entanto, antes de excluir, verificamos se a linha contém /7/ e, nesse caso, a imprimimos com o comando p .

Usando o awk

o awk oferece muita flexibilidade. Aqui, usamos uma variável f como sinalizador para decidir se as linhas devem ser impressas:

$ seq 9 | awk '/^3/{f=1} /7/{f=0} !f'
1
2
7
8
9
    
por 12.11.2015 / 18:58