shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Ajuda com regex e laço


From: Cristiano
Subject: Re: Ajuda com regex e laço
Date: Tue, 16 Feb 2010 13:22:50 -0000
User-agent: eGroups-EW/0.82


--- Em address@hidden, "Cristiano" <boxferrari@...> 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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]