Solução sed
#!/bin/bash
sed -nr '
/^<[^<]*>$/ {
N
/^<([^<]*)>\n<\/>$/=
}
' "$1" | awk '{print "Output: "$NF - 1" -> line number"}'
Explicação:
-
%código%
-
sed
se tivermos uma tag aberta na linha -
/^<[^<]*>$/
- acrescenta a próxima linha de entrada no espaço padrão. -
N
e verifique se a próxima linha tem a tag fechada equivalente. - se for esse o caso, imprima este número de linha pelo comando
/^<([^<]*)>\n<\/>$/
. Tenha em mente que é o número da linha de tag fechada. Devemos diminuí-lo em mais um.
-
-
=
- diminui o número da linha e imprime na string da mensagem.
Teste:
Entrada
<a>
</a>
<a>
<b></b>
<c></c>
<c>
</c>
</a>
Resultado
./empty_tag.sh input.txt
Output: 1 -> line number
Output: 6 -> line number
solução AWK
Uso: awk
#!/bin/bash
awk -F'[>/]' '
line_num {
if(NF == 3) {print "Output: " line_num " -> line number";}
line_num = 0;
}
NF == 2 {line_num = NR;}
' "$1"