Enquanto sed
pode ser usado para isso, qualquer coisa que envolva contagem é geralmente mais fácil com awk
.
Vamos considerar este arquivo de teste:
$ cat file1
GROUP DIRECTORY CATEGORIES
datadata
Grouping Cat
datadata
datadata
Above is 3rd blank line
Para adicionar um ,;
à terceira linha em branco após GROUP DIRECTORY CATEGORIES
:
$ awk '/GROUP DIRECTORY CATEGORIES/{f=1} f && /^$/ {f++; if (f==4) $0=",;"} 1' file1
GROUP DIRECTORY CATEGORIES
datadata
Grouping Cat
datadata
datadata
,;
Above is 3rd blank line
Como funciona:
-
/GROUP DIRECTORY CATEGORIES/{f=1}
Sempre que for encontrada uma linha que corresponda à regex
GROUP DIRECTORY CATEGORIES
, a variávelf
será definida como 1. -
f && /^$/ {f++; if (f==4) $0=",;"}
Se
f
for diferente de zero e a linha atual estiver em branco,/^$/
, então incrementef
em um. Sef
for 4, substitua a linha em branco atual por,;
. -
1
1
é a abreviatura enigmática do awk para imprimir na linha.