--- Em [email protected], "Cristiano" <boxferr...@...> escreveu > > 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 >
Obrigado a todos que responderam. Consegui fazer o que precisava. O script ficou assim: http://pastebin.com/f2e3f31bb Gostaria muito de receber comentários, críticas ou sugestões sobre o que eu fiz.
