Como copiar e concatenar vários textos diferentes. [RESOLVIDO]

1. Como copiar e concatenar vários textos diferentes. [RESOLVIDO]

jean carlo maestrelli
jeanzord

(usa CentOS)

Enviado em 01/11/2016 - 15:34h

Pessoal por favor uma ajuda !!!

Em um arquivo xml, o conteúdo de um determinada tag precisa ser concatenado dentro de outra, e oque ta quebrando a minhas pernas e que os conteúdos são todos diferentes, talvez me falte um pouco de conhecimento no comando sed e não to conseguindo fazer com for e while pois o arquivo tem 6 megas e ao tentar ler o arquivo com for ou while ele entende como se o conteúdo fosse inteiro em uma linha só.

precisava que o conteudo da tag <g:brand>:
<g:brand><![CDATA[ Kappesberg ]]></g:brand>

no caso Kappesberg fosse concatenado dentro da tag <title>
<title><![CDATA[ PAINEL PARA CABECEIRA DE CAMA 160 X 60 ]]></title>

ficando desta maneira:
<title><![CDATA[ PAINEL PARA CABECEIRA DE CAMA 160 X 60-Kappesberg]]></title>

Aqui é um pedaço do código lembrando que os produtos e fabricas mudam !!!
<entry> <g:id><![CDATA[ MQ180002071946Z ]]></g:id><g:item_group_id><![CDATA[ 195 ]]></g:item_group_id><title><![CDATA[ PAINEL PARA CABECEIRA DE CAMA 160 X 60 ]]></title><description><![CDATA[ Painel modular para cabeceira de cama ]]></description><g:google_product_category><![CDATA[ ]]></g:google_product_category><g:product_type><![CDATA[ QUARTO ]]></g:product_type><g:product_type><![CDATA[ CABECEIRAS ]]></g:product_type><g:product_type><![CDATA[ MÓDULOS ]]></g:product_type><link><![CDATA[ http://www.attraktiva.com.br/produto/mq180002071946z/painel-para-cabeceira-de-cama/campanha_id/139 ]]></link><g:image_link><![CDATA[ http://www.attraktiva.com.br/Assets/Produtos/SuperZoom/C551_635514782534724802.jpg ]]></g:image_link><g:availability><![CDATA[ out of stock ]]></g:availability><g:price><![CDATA[ R$ 207,00 ]]></g:price><g:sale_price><![CDATA[ R$ 143,34 ]]></g:sale_price><g:installment><g:months>12</g:months><g:amount>R$ 14,33</g:amount></g:installment><g:condition><![CDATA[ new ]]></g:condition><g:gtin><![CDATA[ ]]></g:gtin><g:brand><![CDATA[ Kappesberg ]]></g:brand><g:identifier_exists><![CDATA[ FALSE ]]></g:identifier_exists> </entry>



por favor me ajudem ja estou quase desistindo


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/11/2016 - 22:00h

jeanzord escreveu:
======================================================
Boa noite Jean.
Reformulei as REGEX, e fiz algumas alterações no script . . .
Segue:
#!/bin/bash
log=/tmp/arquivos/auxliargeragoogle.txt
brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [[:alnum:] ]+ )'|sed 's/^ /- /'`
title=$(grep -o '<title>.*</title>' $log|egrep -o '( [[:alnum:] -]+ )')
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "Mostrando brand:\"$brand\""
echo "Mostrando title:\"$title\""
aux="${title}${brand}"
echo "Concatenado:\"$aux\""
sed -i "s/$title/$aux/" $log
cat $log
echo $1 #Que argumento é esse?
echo "-------"
fi

Verifique se funciona . . . .

No aguardo,
Marcelo


Porra Marcelo você e o cara mesmo, puts sem palavra pra agradecer, precisei mudar poucas coisa funcionou certinho !!!!!
So tenho mais um pedido pra te fazer, por motivo de aprendizado mesmo você poderia me explicar a alteraçao que voce fez?
Esse jeito de trabalhar com variáveis eu não conhecia ou pelo menos não me lembro de ter visto na faculdade.

brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [[:alnum:] ]+ )'|sed 's/^ /- /'`
title=$(grep -o '<title>.*</title>' $log|egrep -o '( [[:alnum:] -]+ )')
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "Mostrando brand:\"$brand\""
echo "Mostrando title:\"$title\""
aux="${title}${brand}"
echo "Concatenado:\"$aux\""
[/code][/quote]
===============================================
Boa noite, Jean.
Que me recorde, a alteração foi na REGEX, usando a "classe POSIX" "[:alnum:]" e incluindo o "-",
Tbem protegi as variáveis, tipo:
aux="${title}${brand}"
Sempre que precisar casar o "-", coloque-o no final, veja em "title"

Jean disse:
Esse jeito de trabalhar com variáveis eu não conhecia . . .
Qual jeito? Esse: title=$(grep -o '<title>.*</title>' $log|egrep -o '( [[:alnum:] -]+ )')
Li em algum lugar que é melhor usar $(comando) do que `comando`

Dei uma verificada rápida no seu script e notei que esta testando o EXIT CODE do CURL e do SED . . .
Reveja isso....
O CURL não retorna "ZERO", veja:
man curl|sed -n '/EXIT CODE/,/AUTHORS/p'|sed '$d'
O SED, sempre retorna ZERO . . .

Jean disse:
Porra Marcelo você e o cara mesmo, puts sem palavra pra agradecer . . .
Um gesto, vale mais do que mil palavras . . . :)
Então, marque a resposta como A MELHOR . . . Rsrsrsrsr

Se me permite, vou analisar "mais a fundo" o seu script, e posto as sugestões . . .
É isso.
Abç.:
Marcelo Oliver




3. Re: Como copiar e concatenar vários textos diferentes.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2016 - 18:20h

jeanzord escreveu:

Pessoal por favor uma ajuda !!!

Em um arquivo xml, o conteúdo de um determinada tag precisa ser concatenado dentro de outra, e oque ta quebrando a minhas pernas e que os conteúdos são todos diferentes, talvez me falte um pouco de conhecimento no comando sed e não to conseguindo fazer com for e while pois o arquivo tem 6 megas e ao tentar ler o arquivo com for ou while ele entende como se o conteúdo fosse inteiro em uma linha só.

precisava que o conteudo da tag <g:brand>:
<g:brand><![CDATA[ Kappesberg ]]></g:brand>

no caso Kappesberg fosse concatenado dentro da tag <title>
<title><![CDATA[ PAINEL PARA CABECEIRA DE CAMA 160 X 60 ]]></title>

ficando desta maneira:
<title><![CDATA[ PAINEL PARA CABECEIRA DE CAMA 160 X 60-Kappesberg]]></title>

Aqui é um pedaço do código lembrando que os produtos e fabricas mudam !!!
<entry> <g:id><![CDATA[ MQ180002071946Z ]]></g:id><g:item_group_id><![CDATA[ 195 ]]></g:item_group_id><title><![CDATA[ PAINEL PARA CABECEIRA DE CAMA 160 X 60 ]]></title><description><![CDATA[ Painel modular para cabeceira de cama ]]></description><g:google_product_category><![CDATA[ ]]></g:google_product_category><g:product_type><![CDATA[ QUARTO ]]></g:product_type><g:product_type><![CDATA[ CABECEIRAS ]]></g:product_type><g:product_type><![CDATA[ MÓDULOS ]]></g:product_type><link><![CDATA[ http://www.attraktiva.com.br/produto/mq180002071946z/painel-para-cabeceira-de-cama/campanha_id/139 ]]></link><g:image_link><![CDATA[ http://www.attraktiva.com.br/Assets/Produtos/SuperZoom/C551_635514782534724802.jpg ]]></g:image_link><g:availability><![CDATA[ out of stock ]]></g:availability><g:price><![CDATA[ R$ 207,00 ]]></g:price><g:sale_price><![CDATA[ R$ 143,34 ]]></g:sale_price><g:installment><g:months>12</g:months><g:amount>R$ 14,33</g:amount></g:installment><g:condition><![CDATA[ new ]]></g:condition><g:gtin><![CDATA[ ]]></g:gtin><g:brand><![CDATA[ Kappesberg ]]></g:brand><g:identifier_exists><![CDATA[ FALSE ]]></g:identifier_exists> </entry>
por favor me ajudem ja estou quase desistindo

==========================================================================================
Boa noite Jean.
Desista não!
O conteúdo da TAG, "ta" pego . . .
grep -o '<g:brand>.*</g:brand>' TESTES_TEXTO|egrep -o -i '([ ][A-Z]+[ ])'|sed 's/^ /-/' 

-Kappesberg
Agora vamos tentar o restante...

att.:
marcelo oliver




4. Re: Como copiar e concatenar vários textos diferentes.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2016 - 19:13h

Continuando . . .
Pega o TEXTO de "<title>"
grep -o '<title>.*</title>' TESTES_TEXTO|egrep -o '( [A-Z0-9 ]+ )' 

PAINEL PARA CABECEIRA DE CAMA 160 X 60
Atribua o "conteúdo" para as variáveis e faça:
sed "s/$var1/$var2/" TESTES_TEXTO
lynx --dump goo.gl/a9KeFc|sed -n '/^Educação/,/ajudou/p' 


att.:
marcelo oliver


5. Re: Como copiar e concatenar vários textos diferentes. [RESOLVIDO]

jean carlo maestrelli
jeanzord

(usa CentOS)

Enviado em 03/11/2016 - 18:32h

msoliver escreveu:

Continuando . . .
Pega o TEXTO de "<title>"
grep -o '<title>.*</title>' TESTES_TEXTO|egrep -o '( [A-Z0-9 ]+ )' 

PAINEL PARA CABECEIRA DE CAMA 160 X 60
Atribua o "conteúdo" para as variáveis e faça:
sed "s/$var1/$var2/" TESTES_TEXTO
lynx --dump goo.gl/a9KeFc|sed -n '/^Educação/,/ajudou/p' 


att.:
marcelo oliver


OPa Marcelão valeu cara, funcionou 99% só que no title tem alguns produtos que tem a medida tipo MESA DE JANTAR QUADRADA COM TAMPO DE MADEIRA IMBUIA-140CM
só que no comando title=`grep -o -i '<title>.*</title>' $log|egrep -i -o -e '( [A-Z0-9/^-ÁÉÍÓÚÇáéíóúç ]+ )'`
ele nao esta pegando a parte da medida IMBUIA-140CM
e na hora de juntar as variáveis com o comando ele esta colocando a fabrica antes da medida assim
MESA DE JANTAR QUADRADA COM TAMPO DE MADEIRA - FerratiIMBUIA-140CM
no caso ai a fabrica e a FERRATI

ai vai o codigo

#!/bin/bash
log=/tmp/arquivos/auxliargeragoogle.txt
brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [A-Z0-9 ]+ )'|sed 's/^ / - /'`
title=`grep -o -i '<title>.*</title>' $log|egrep -i -o -e '( [A-Z0-9/^-ÁÉÍÓÚÇáéíóúç ]+ )'`
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "mostrando brand: " $brand
echo "mostrando title: " $title
aux=`echo $title $brand`
echo "Concatenado: "$aux
sed "s/$title/$aux/g" $log
echo $log
echo $1
echo "-------"
fi
~



6. Re: Como copiar e concatenar vários textos diferentes.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/11/2016 - 19:40h

jeanzord escreveu:

msoliver escreveu:

Continuando . . .
Pega o TEXTO de "<title>"
grep -o '<title>.*</title>' TESTES_TEXTO|egrep -o '( [A-Z0-9 ]+ )' 

PAINEL PARA CABECEIRA DE CAMA 160 X 60
Atribua o "conteúdo" para as variáveis e faça:
sed "s/$var1/$var2/" TESTES_TEXTO
lynx --dump goo.gl/a9KeFc|sed -n '/^Educação/,/ajudou/p' 


att.:
marcelo oliver


OPa Marcelão valeu cara, funcionou 99% só que no title tem alguns produtos que tem a medida tipo MESA DE JANTAR QUADRADA COM TAMPO DE MADEIRA IMBUIA-140CM
só que no comando title=`grep -o -i '<title>.*</title>' $log|egrep -i -o -e '( [A-Z0-9/^-ÁÉÍÓÚÇáéíóúç ]+ )'`
ele nao esta pegando a parte da medida IMBUIA-140CM
e na hora de juntar as variáveis com o comando ele esta colocando a fabrica antes da medida assim
MESA DE JANTAR QUADRADA COM TAMPO DE MADEIRA - FerratiIMBUIA-140CM
no caso ai a fabrica e a FERRATI

ai vai o codigo

#!/bin/bash
log=/tmp/arquivos/auxliargeragoogle.txt
brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [A-Z0-9 ]+ )'|sed 's/^ / - /'`
title=`grep -o -i '<title>.*</title>' $log|egrep -i -o -e '( [A-Z0-9/^-ÁÉÍÓÚÇáéíóúç ]+ )'`
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "mostrando brand: " $brand
echo "mostrando title: " $title
aux=`echo $title $brand`
echo "Concatenado: "$aux
sed "s/$title/$aux/g" $log
echo $log
echo $1
echo "-------"
fi
~


======================================================
Boa noite Jean.
Reformulei as REGEX, e fiz algumas alterações no script . . .
Segue:
#!/bin/bash
log=/tmp/arquivos/auxliargeragoogle.txt
brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [[:alnum:] ]+ )'|sed 's/^ /- /'`
title=$(grep -o '<title>.*</title>' $log|egrep -o '( [[:alnum:] -]+ )')
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "Mostrando brand:\"$brand\""
echo "Mostrando title:\"$title\""
aux="${title}${brand}"
echo "Concatenado:\"$aux\""
sed -i "s/$title/$aux/" $log
cat $log
echo $1 #Que argumento é esse?
echo "-------"
fi

Verifique se funciona . . . .

No aguardo,
Marcelo


7. Re: Como copiar e concatenar vários textos diferentes.

jean carlo maestrelli
jeanzord

(usa CentOS)

Enviado em 04/11/2016 - 19:58h

======================================================
Boa noite Jean.
Reformulei as REGEX, e fiz algumas alterações no script . . .
Segue:
#!/bin/bash
log=/tmp/arquivos/auxliargeragoogle.txt
brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [[:alnum:] ]+ )'|sed 's/^ /- /'`
title=$(grep -o '<title>.*</title>' $log|egrep -o '( [[:alnum:] -]+ )')
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "Mostrando brand:\"$brand\""
echo "Mostrando title:\"$title\""
aux="${title}${brand}"
echo "Concatenado:\"$aux\""
sed -i "s/$title/$aux/" $log
cat $log
echo $1 #Que argumento é esse?
echo "-------"
fi

Verifique se funciona . . . .

No aguardo,
Marcelo[/quote]

Porra Marcelo você e o cara mesmo, puts sem palavra pra agradecer, precisei mudar poucas coisa funcionou certinho !!!!!
So tenho mais um pedido pra te fazer, por motivo de aprendizado mesmo você poderia me explicar a alteraçao que voce fez?
Esse jeito de trabalhar com variáveis eu não conhecia ou pelo menos não me lembro de ter visto na faculdade.

brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [[:alnum:] ]+ )'|sed 's/^ /- /'`
title=$(grep -o '<title>.*</title>' $log|egrep -o '( [[:alnum:] -]+ )')
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
echo "Mostrando brand:\"$brand\""
echo "Mostrando title:\"$title\""
aux="${title}${brand}"
echo "Concatenado:\"$aux\""

aqui esta o codigo completo:
#!/bin/sh

rm -rf /mnt/backup/google/*.*
rm -rf /tmp/arquivos/auxliargeragoogle.txt
rm -rf /tmp/arquivos/log_erros_xmlgoogle.txt
sleep 5
logemail=/tmp/arquivos/`date +%d%m%Y%H:%M`-emailgeragoogle.txt
arquivoDownload=/mnt/backup/google/downloadxml.txt
arquivoInstock=/mnt/backup/google/geragoogle.txt
log=/tmp/arquivos/auxliargeragoogle.txt
logerro=/tmp/arquivos/log_erros_xmlgoogle.txt
xmlfinal=/mnt/backup/google/google-instock.xml
i=0;
x=0;

function monta_InStock()
{

curl www.attraktiva.com.br/ProdutoXml.aspx?campanha_id=139 > $arquivoDownload
if [ $? -eq 0 ] ; then

echo "$(sed 's/out of stock/in stock/g' $arquivoDownload)" > $arquivoInstock
rm -rf $arquivoDownload
else
echo " " >> $logemail
echo "Deu pau no download do arquivo !!!!" >> $logemail
echo " " >> $logemail
exit 0

fi
}


function carai_que_foda()
{
brand=`grep -o '<g:brand>.*</g:brand>' $log|egrep -o -i '( [[:alnum:] ]+ )'|sed 's/^ /- /'`
title=$(grep -o '<title>.*</title>' $log|egrep -o -i '( [[:alnum:] -+]+ )')
if [ "$brand" != "" ] && [ "$title" != "" ] ; then
aux="${title}${brand}"
sed -i "s|$title|$aux|g" $log
if [ $? -ne 0 ] ; then
sed -i "s|$title|$aux|g" $log >> $logerro
echo "****ERRO NO SED****" >> $logerro
echo "Mostrando brand:\"$brand\"" >> $logerro
echo "Mostrando title:\"$title\"" >> $logerro
echo "Concatenado:\"$aux\"" >> $logerro
echo "****ERRO NO SED****" >> $logerro
echo "" >> $logerro
cat $log >> $logerro
echo "" >> $logerro
echo "-------" >> $logerro
let "i= i +1"
exit 0
fi

cat $log >> $xmlfinal
let "x = x +1"

else
cat $log >> $xmlfinal
fi

}


function monta_xml()
{

while read linha
do

echo $linha > $log
carai_que_foda

done < $arquivoInstock

}

function monta_email()
{
echo "######################################################################
# Script de Backup
# Por: jean carlo maestrelli
######################################################################" >> $logemail

echo "______________________________________________________________________" >> $logemail
echo "INICIO" >> $logemail
echo "______________________________________________________________________" >> $logemail
echo "DIA" `date +%d/%m/%Y` >> $logemail
echo "HORA" `date +%H:%M:%S` >> $logemail
echo "______________________________________________________________________" >> $logemail

monta_InStock
monta_xml
cd /mnt/backup/google/
nome=`du -ha google-instock.xml`
arquivo=(`du -h $xmlfinal | cut -d "/" -f 5`)
rsync $xmlfinal attraktiva1@attraktivadesign.com.br:/home/storage/9/e0/d0/attraktiva1/public_html/google/
if [ $? -eq 0 ] ; then
echo " " >> $logemail
echo "TAMANHO E NOME DO ARQUIVO: "$nome >> $logemail
echo " " >> $logemail
echo "Link para o arquivo: http://www.attraktivadesign.com.br/google/$arquivo"; >> $logemail
echo " " >> $logemail
echo "Quantidade de Produtos Alterados: "$x >> $logemail
echo "Quandidade de Erros no SED: "$i >> $logemail
echo "______________________________________________________________________" >> $logemail
echo "FIM" >> $logemail
echo "######################################################################" >> $logemail

else
echo " " >> $logemail
echo "Deu pau no envio do arquivo $nome para o FTP !!!!" >> $logemail
echo " " >> $logemail
echo "Quantidade de Produtos Alterados: "$x >> $logemail
echo "Quandidade de Erros no SED: "$i >> $logemail
echo "______________________________________________________________________" >> $logemail
echo "FIM" >> $logemail
echo "######################################################################" >> $logemail
fi

echo "Quantidade de Produtos Alterados: "$x >> $logemail
echo "Quandidade de Erros no SED: "$i >> $logemail
envia_email
}

function envia_email()
{

EMAIL_DE="webmaster@attraktiva.com.br"
EMAIL_PARA="ti@attraktiva.com.br"
SERVIDOR_SMTP="smtp.attraktiva.com.br:587"
SENHA='************'
ASSUNTO="ARQUIVO GOOGLE-INSTOCK.XML JA ESTA DISPONIVEL `date +%d/%m/%Y`"
MENSAGEM="message-file=$logemail"
ANEXO=""
/usr/local/bin/sendEmail -f $EMAIL_DE -t $EMAIL_PARA -u "$ASSUNTO" -o "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_DE -xp $SENHA

}



monta_email







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts