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

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

Ajuda com regex e laço


From: Cristiano
Subject: Ajuda com regex e laço
Date: Mon, 15 Feb 2010 18:09:26 -0000
User-agent: eGroups-EW/0.82

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



reply via email to

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