Como substituir o próximo registro após uma correspondência de padrão usando o awk

1

Como substituir (ou modificar) o próximo registro após uma correspondência de padrões? Ex:

1
2
3 blah
4 replace this record
5 blah
6 replace this record
7 
8
9

Aqui eu quero pular ou substituir o quarto registro e o sexto registro quando o registro anterior é "blah"

    
por var 28.05.2016 / 03:18

1 resposta

3

Isso substitui a linha após blah :

$ awk 'f{$0="replacement"; f=0} /blah/{f=1} 1' file
1
2
3 blah
replacement
5 blah
replacement
7 
8
9

Como funciona

  • f{$0="replacement"; f=0}

    Se f for verdadeiro (diferente de zero), substitua a linha e redefina f para zero.

  • /blah/{f=1}

    Se essa linha corresponder à regex blah , defina f como true.

  • 1

    Esta é uma abreviada enigmática do awk para imprimir em toda a linha.

por 28.05.2016 / 03:22

Tags