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

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

Re: [shell-script] Manipulação de string


From: Rodrigo Boechat
Subject: Re: [shell-script] Manipulação de string
Date: Fri, 07 Oct 2011 02:17:25 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20110923 Thunderbird/7.0

Boa noite.
Eu cheguei ao resultado com a linha abaixo, também usando a variável 
zona como base de pesquisa:

LINHA
echo 'teste.spf-25.dominio.net.br. 3600 IN TXT "v=spf1 
ip4:XXX.XXX.XXX.0/24 ip4:YYY.YYY.YYY.0/24 
exists:%{h}.%{p}.%{l}.%{i}._spf-25.dominio.net.br ~all"' | sed -e 
"s/^\(\([a-zA-Z0-9.-]*\)\{1,2\}\)\(\.$zona\)\([0-9A-Za-z 
.]*\)\(.*\)/(HOST) \1 \n(LIXO) \3\4 \n(REGISTRO) \5/"

RETORNO
(HOST) teste.spf-25
(LIXO) .dominio.net.br. 3600 IN TXT
(REGISTRO) "v=spf1 ip4:XXX.XXX.XXX.0/24 ip4:YYY.YYY.YYY.0/24 
exists:%{h}.%{p}.%{l}.%{i}._spf-25.dominio.net.br ~all"

Acho que isso também pode atender sua necessidade, mas como a solução do 
Fernando funcionou muito bem, não há necessidade de explicar o que eu 
fiz. ^_^

Abraço.
Rodrigo Boechat

Em 07-10-2011 00:46, Fernando Mercês escreveu:
> Oi Rodrigo. Vamos lá.
>
> Se você tem a $zona, pode usá-la no awk para capturar os caracteres até que
> ela apareça:
>
> $ registro='spf-25.dominio.net.br. 3600 IN TXT "v=spf1 ip4:XXX.XXX.XXX.0/24
> ip4:YYY.YYY.YYY.0/24 exists:%{h}.%{p}.%{l}.%{i}._spf-25.dominio.net.br~all"'
>
> $ zona=dominio.net.br
>
> $ echo $registro | awk '{print substr($1, 1, index($1, z)-2)}' z=$zona
> spf-25
>
> Explicando:
>
> index(string1, string2) --->  função que retorna a posição da string2 na
> string1. No caso, estou procurando a string z (que é a zona) no primeiro
> campo ($1).
>
> substr(string1, inicio, fim) --->  retorna uma substring da string1 que
> começa em 'inicio' e termina em 'fim'. Usei o início como sendo 1 (primeiro
> caractere de $1) e o fim sendo a posição da $zona na string, -2 para remover
> o ponto antes do nome do domínio.
>
> z=$zona --->  recurso para criar uma variável que poderá ser usada dentro do
> bloco de código do awk. Eu chamei de 'z' uma variável com o conteúdo de
> $zona.
>
> Na outra mensagem eu também usei a função length(string) que retorna o
> tamanho (quantidade de caracteres) de uma string.
>
>> $ echo $a | awk 'BEGIN {FS = "."}; {printf "%s ", $1}; {print substr($0,
>> index($0, "\""), length($0))}'
> Nesse trecho aqui, eu setei FS (variável interna do awk que significa Field
> Separator) para ser o ponto, aí imprimi o campo 1 com o printf. É como fazer
> "cut -d. -f1". Daria certo, se não fosse o problema que você levantou com os
> registros que tenham ponto no nome. Depois foi a mesma lógica da explicação
> anterior, usando substr(), index() e length(). ;-)
>
> Abração.
>
> Att,
>
> Fernando Mercês
> Linux Registered User #432779
> www.mentebinaria.com.br
> softwarelivre-rj.org
> @MenteBinaria
> ------------------------------------
> Participe do I Hack'n Rio
>                   hacknrio.org
> ------------------------------------
>
>
> 2011/10/6 M. Rodrigo Monteiro<address@hidden>
>
>> **
>>
>>
>> Oi!
>>
>> 2011/10/6 Fernando Mercês<address@hidden>:
>>
>>> Se quiser pegar um de cada vez, o cut resolve:
>>>
>>> $ a='spf-25.dominio.net.br. 3600 IN TXT "v=spf1 ip4:XXX.XXX.XXX.0/24
>>> ip4:YYY.YYY.YYY.0/24 exists:%{h}.%{p}.%{l}.%{i}._spf-25.dominio.net.br
>> ~all"'
>>> $ echo $a | cut d. -f1
>>> spf-25
>>>
>>> $ echo $a | cut -d\" -f2
>>> v=spf1 ip4:XXX.XXX.XXX.0/24 ip4:YYY.YYY.YYY.0/24
>>> exists:%{h}.%{p}.%{l}.%{i}._spf-25.dominio.net.br ~all
>> Pode haver ponto também no registro, ou seja, poderia ser
>> teste.spf-25.dominio.net.br. Nesse caso tanto o cut quanto o AWK daria
>> erro pois o separador não é o ponto, e sim $zona
>>
>>
>>>
>>> Agora, para imprimir os dois de uma vez só, consegui com o awk:
>>>
>>> $ echo $a | awk 'BEGIN {FS = "."}; {printf "%s ", $1}; {print substr($0,
>>> index($0, "\""), length($0))}'
>>> spf-25 "v=spf1 ip4:XXX.XXX.XXX.0/24 ip4:YYY.YYY.YYY.0/24
>>> exists:%{h}.%{p}.%{l}.%{i}._spf-25.dominio.net.br ~all"
>>>
>> Você poderia explicar essa sintaxe do AWK?
>>
>> Abraços,
>> Rodrigo.
>>
>>
>>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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