--- Em [email protected], "Cristiano" <boxferr...@...> escreveu > > Salve ilustres, boa tarde. > > Estou montando um script para extrair dados de um arquivo XML (nota fiscal > eletronica). > (...) > 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.
UPDATE: Consegui pegar apenas o conteúdo do primero campo, mas usando o sed. Entretanto, ainda tenho interesse e melhorar a regex, a título de aprendizado. Fiz assim: http://pastebin.com/f5190fbf5 O problema do laço, ainda não sei como resolver. E, mesmo esta solução com sed não está perfeita. Não sei por que razão, não está retornando apenas o resultado do sed. Veja o conteúdo do XML: http://pastebin.com/f7252436a Notem que todas as informações que me interessam (os campos cProd) estão todos na primeira linha do arquivo. Porém, mesmo apesar do '-n', o conteúdo da 2.ª linha em diante é exibido inteiro. Veja o resultado: http://pastebin.com/f8ada9bb Notem que na linha em destaque o sed retornou o conteúdo correto do primeiro campo cProd, mas também exibiu o conteúdo da linha 2 em diante. Onde está a caca?
