Primeiro de tudo, Eu acho um pouco estranho procurar por um número de linha em XML. XML é uma estrutura de árvore, onde os espaços em branco são irrelevantes, e, portanto, os números de linha também devem ser irrelevantes. Isso me faz pensar se esse é um problema XY .
Em segundo lugar, e se eu ignorar a questão do número da linha, geralmente é melhor usar um analisador XML adequado, ou algo que pode fazer consultas XPATH. Em termos de XML, sua pergunta está perto de "qual é a chave do nó cujo tipo é X". Qual é uma pergunta razoável e bem definida para perguntar, ao trabalhar com XML.
Dito isto,
se o "mais próximo" <key>
sempre vier antes do <type>
,
então você pode considerar este algoritmo no awk:
- Se a linha corresponder a
<key>key-im-looking-for<
, registre o número da linha - Se a linha corresponder a
<type>org.apache.whatever.package<
, pare o processamento - No final, imprima o número da linha gravada
Algo parecido com isto:
awk '/<key>key-im-looking-for</ { line=NR }
/<type>org.apache.whatever.package</ { exit }
END { print line }' input.xml