Nota: Esta resposta foi escrita antes do usuário explicar que o XML não estava bem formado. Estou deixando aqui, pois isso pode ajudar os outros.
XMLStarlet
é capaz de produzir a estrutura de elementos de documentos XML:
$ xml el file.xml
note
note/to
note/from
note/heading
note/body
Isso é diferente da saída esperada, mas pode ser suficiente para o que você deseja alcançar.
Também é capaz de converter o XML em PYX, que mostra as tags de abertura e fechamento em linhas separadas:
$ xml pyx file.xml
(note
-\n
(to
-Tove
)to
-\n
(from
-Jani
)from
-\n
(heading
-Reminder
)heading
-\n
(body
-Don't forget me this weekend!
)body
-\n
)note
Com isso, é fácil obter exatamente a saída desejada:
$ xml pyx file.xml | sed -n -e 's/^(//p' -e 's/^)/\//p'| nl
1 note
2 to
3 /to
4 from
5 /from
6 heading
7 /heading
8 body
9 /body
10 /note
As instruções sed
eliminam as linhas que não iniciam com (
ou )
e substituem esses caracteres de acordo com a forma como você especificou na pergunta. O utilitário nl
coloca o número da linha nas linhas.
Às vezes, o XMLStarlet é instalado como xmlstarlet
em vez de xml
.