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: Mon, 15 Feb 2010 18:49:00 -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).
> 
(...)
> 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?






reply via email to

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