Salve ilustres, boa tarde. Estou montando um script para extrair dados de um arquivo XML (nota fiscal eletronica).
Dentro do XML há um campo 'cProd'. Preciso do conteúdo dele, porém, podem haver inúmeros registros cProd (mínimo de 1). Exemplo: (...) <cProd>001</cProd> <xProd>Nome do produto</xProd> <cProd>002</cProd> <xProd>Nome do outro produto</xProd> (...) <cProd>NNN</cProd> <xProd>Nome do produto NNN</xProd> (...) A extrutura do arquivo não está organizada hierarquicamente linha por linha como no exemplo. É tudo uma única linha. Usei a seguinte regex: grep -Eo '<cProd>.*<\/cProd>' O problema é que esta regex casa com todo o conteúdo da primeira tag <cProd> até a última tag </cProd>, retornando do código do primeiro produto e até o último (NNN). Tenho 2 dúvidas: 1) O que posso colocar no lugar do '.*' para fazer ele pegar apenas o primeiro campo "cProd", parando na primeira tag </cProd> que encontrar? 2) Uando esta regex, como posso criar um laço para extrair todos os campos cProd do arquivo (pode vir com as tags junto, que eu me viro em removê-las)? Algo que me dê o seguinte resultado: # extrai_codigo.sh nome_do_arquivo.xml nome_do_arquivo.xml:501 nome_do_arquivo.xml:502 nome_do_arquivo.xml:503 Minha necessidade é pegar um diretório com N (leia-se trocentos) arquivos XML e saber quais os códigos de produto em cada um deles. Abraço Cristiano