Tente:
$ awk '/test1/{f=0} !f{print} /test1\/end/{f=1}' sentence.txt
20 /test1/catergory="Food"
20 /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20 /test1/type="Western"
20 /test1/theme="Halloween"
20 /test1/end=category
20 /test1/Purpose=
20 /test1/my_purpose="To create
a fun-filled moment"
20 /test1/end=Purpose
Como funciona
Quando o awk inicia, qualquer variável indefinida é, por padrão, falsa. Então, quando o awk começa f
será falso. O awk então lerá cada linha e executará os três comandos a seguir:
-
/test1/{f=0}
Para qualquer linha que contenha
test1
, definimos a variávelf
como false (0).Quando estivermos em um intervalo de linhas que queremos imprimir,
f
será definido como falso. -
!f{print}
Se
f
for falso, imprima a linha atual. -
/test1\/end/{f=1}
Para qualquer linha que contenha
test1/end
, definaf
como true (1).Isso sinaliza que não devemos imprimir as linhas que seguem até chegarmos a uma linha que contenha
test1
.
Usando variáveis
awk -v a="test1" -v b="test1/end" '$0~a{f=0} !f{print} $0~b{f=1}' sentence.txt