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

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

Re: [shell-script] Pegar apenas a URL


From: Rodrigo Boechat
Subject: Re: [shell-script] Pegar apenas a URL
Date: Thu, 29 Sep 2011 15:47:35 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:6.0.2) Gecko/20110906 Thunderbird/6.0.2

Bom. Minha resposta para esse caso.
Essa expressão que eu fiz pede um mínimo de caracteres fixados em suas 
posições para encontrar o padrão.
Desse jeito, trocando o "co", "edu", ... por algum genérico como você 
propôs, faz minha expressão se perder. "Tudo achará tudo".
Fiz vários testes inclusive usando [a-z]{2,3}, para achar o co, com, 
edu.....
Mas tive sempre a mesma resposta que a sua.

Estava quase desistindo quando cheguei numa solução.
Consegui assim:

cut -d'/' -f3 teste.txt | sed -e '/\.[a-z]\{3\}$/!d' | rev | cut -d'.' 
-f-2 | rev
cut -d'/' -f3 teste.txt | sed -e '/\.[a-z]\{3\}$/d' | rev | cut -d'.' 
-f-3 | rev

Vendo minhas linhas, penso que eu ainda não sei o suficiente para 
resolver o caso com uma linha.
Pode haver algum outro comando mais adequado para o caso que eu ainda 
não conheço...

Bom, o fato que as duas linhas ficaram Fáceis de compreender. :)
Agora não me peça para ir além disso. Minha mente vai fundir. Kkkkkkkk

Atualizei no PasteBin com um exemplo prático, gerando um arquivo de 
resultado com as respostas das linhas.
Isso deve ser possível aplicar na função, acredito.

Abraço!
Rodrigo Boechat



Em 29-09-2011 12:59, Fernando Mercês escreveu:
> Modifiquei para pegar qualquer coisa, mas ainda dá problema se tiver um
> subdomínio do site com o domínio pai do país no fim (.br, .uk, .jp etc):
>
> $ echo http://nada.mentebinaria.com | cut -f3 -d'/' | rev | cut -d'.' -f-3 |
> rev | sed 's/\([a-zA-Z0-9]*\.\)\([a-zA-Z0-9]*\.[a-zA-Z].\.*\)/\2/'
> mentebinaria.com
>
> $ echo http://nada.mentebinaria.com.br | cut -f3 -d'/' | rev | cut -d'.'
> -f-3 | rev | sed 's/\([a-zA-Z0-9]*\.\)\([a-zA-Z0-9]*\.[a-zA-Z].\.*\)/\2/'
> com.br
>
> Alguma ideia?
>
> 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/9/29 Fernando Mercês<address@hidden>
>
>> Rodrigo, eu me expressei mal. O que queria dizer é se teria como o comando
>> ficar genérico  (.net, .org etc). De fato, acho que o autor da thread já
>> resolveu o problema dele. Só estou continuando essa thread como desafio
>> mesmo. :)
>>
>> 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/9/29 Rodrigo Boechat<address@hidden>
>>
>>> **
>>>
>>>
>>> Obrigado. :)
>>>
>>> Beleza. Atualizei o PasteBin.
>>>
>>> Abração!
>>>
>>> Em Qui 29 Set 2011 12:04:05 BRT, Fernando Mercês escreveu:
>>>
>>>> Belo trabalho! :)
>>>>
>>>> Muito legal usar o rev aí.
>>>>
>>>> Daria pra adaptar pra funcionar com endereços do tipo "
>>> http://www.linux.net";
>>>> ? Acho que só falta isso pra ficar perfeito.
>>>>
>>>> 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/9/29 Rodrigo Boechat<address@hidden>
>>>>
>>>>> **
>>>>>
>>>>>
>>>>> Entendi. Boa colocação.
>>>>> Eu segui modelo do exemplo inicial em que todas as urls possuíam
>>> "www.".
>>>>> No caso o que gerou o erro foi meu segundo cut, que quando a linha não
>>>>> possuir "www." deveria ser realizado com a opção "-f1-".
>>>>>
>>>>> Bem. Consegui arrumar o cut usando o esquema com o rev.
>>>>> http://pastebin.com/Fa4XYqz2
>>>>>
>>>>> Aqui deu certo para mim.
>>>>> O resultado é o esperado; acredito.
>>>>>
>>>>> Espero finalmente ter ajudado. :)
>>>>> Abração!
>>>>>
>>>>> Em 28-09-2011 21:06, Fernando Mercês escreveu:
>>>>>
>>>>>> Rodrigo, acho que o caminho é esse. Mas ainda não tá 100%. Veja só:
>>>>>>
>>>>>> $ echo http://unix.com | cut -d'.' -f2- | sed
>>>>>> 's/\([a-zA-Z0-9]*\.\)\([a-zA-Z0-9]*\.co.\.*\)/\2/'
>>>>>> com
>>>>>>
>>>>>> Tem que se levar o número de pontos (.) na URL em consideração, para
>>>>> saber
>>>>>> se estamos tratando de um subdomínio ou não. Eu acabei fazendo uma
>>> função
>>>>>> que, parece, resolve o problema [1]. Pelo menos com os meus testes
>>> aqui,
>>>>> deu
>>>>>> certo:
>>>>>>
>>>>>> $ for i in $(cat urls.txt); do echo -n "$i ->  "; ./url.sh $i; done
>>>>>> http://www.globo.com ->  globo.com
>>>>>> http://www.globo.com/ ->  globo.com
>>>>>> https://www.globo.com/ ->  globo.com
>>>>>> http://globo.com ->  globo.com
>>>>>> http://globo.com/ ->  globo.com
>>>>>> http://blog.globo.com/ ->  globo.com
>>>>>> http://blog.globo.com ->  globo.com
>>>>>> http://blog.globo.com.br ->  globo.com.br
>>>>>> http://blog.globo.com.br/testes/lalala/html/oi.html ->  globo.com.br
>>>>>> http://www.globo.com/asp.php ->  globo.com
>>>>>> http://www.unix.com/lele/lili ->  unix.com
>>>>>> http://unix.com/nada ->  unix.com
>>>>>> http://mail.unix.com ->  unix.com
>>>>>>
>>>>>> [1] http://pastebin.com/KeLmaMzt
>>>>>>
>>>>>> 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/9/28 Rodrigo Boechat<address@hidden>
>>>>>>
>>>>>>> **
>>>>>>>
>>>>>>>
>>>>>>> Bem. Eu cheguei a isso:
>>>>>>>
>>>>>>> arquivo="$HOME/teste.txt"
>>>>>>>
>>>>>>> cat ->>  "$arquivo"<<EOF
>>>>>>>
>>>>>>>
>>>>>>>
>>> http://www.unix.com/shell-programming-scripting/36565-exit-shell-script.html
>>>>>>> http://www.bla.com.br/ble/bli.htm
>>>>>>> http://www.cla.com.br/cle/cli.htm
>>>>>>> http://www.sub1.dla.com/dle/dli.htm
>>>>>>> http://www.sub2.ela.co.uk/ele/eli.htm
>>>>>>> EOF
>>>>>>>
>>>>>>> cut -f3 -d'/' $arquivo | cut -d'.' -f2- | sed
>>>>>>> 's/\([a-zA-Z0-9]*\.\)\([a-zA-Z0-9]*\.co.\.*\)/\2/'
>>>>>>>
>>>>>>> Explicando o cut:
>>>>>>> -d = seta o delimitador de campos
>>>>>>> -f = seta quais campos você vai pegar :: 2- significa do segundo em
>>>>>>> diante, lembrando que o primeiro campo é o zero. Colocando o menos na
>>>>>>> frente do dois [-f-2], você obtém do zero até o segundo.
>>>>>>>
>>>>>>> Explicando o sed:
>>>>>>> s/// = substituição
>>>>>>>
>>>>>>> \( e \) = criam separações endereçadas de 1 a 9 [se não me engano]
>>> num
>>>>>>> bloco de padrao que você esteja procurando. Então eu criei duas
>>>>>>> separações '\([a-zA-Z0-9]*\.\)' e '\([a-zA-Z0-9]*\.co.\.*\)'.
>>>>>>> A primeira busca por qualquer conjunto de letras e números misturados
>>>>>>> terminados por ponto.
>>>>>>> A segunda busca por qualquer conjunto de letras e números misturados
>>>>>>> terminados por ".co*.*".
>>>>>>> Obs: Usei co*. porque me lembrei que o domínio inglês, por exemplo é
>>>>>>> "co.uk".
>>>>>>> Obs2: O povo não gosta de usar o ponto em expressões, portanto a
>>> poarte
>>>>>>> "[a-zA-Z0-9]*\.co.\.*" poderia, também, ser escrita assim:
>>>>>>> "[a-zA-Z0-9]*\.co[a-z]\.*".
>>>>>>>
>>>>>>> Por fim, ao invés de substituir o comando \2\ diz para o s///
>>> escrever o
>>>>>>> conteúdo da segunda separação, no caso, tudo que o
>>>>>>> "[a-zA-Z0-9]*\.co.\.*" abranger.
>>>>>>>
>>>>>>> Tentei ser o mais claro possível. Se eu me enrolei em alguma
>>> explicação
>>>>>>> eu mesmo errei alguma coisa, sintam-se à vontade para corrigir.
>>>>>>>
>>>>>>> Espero ter ajudado.
>>>>>>> Rodrigo Boechat
>>>>>>>
>>>>>>> Em Qua 28 Set 2011 18:55:31 BRT, Fernando Mercês escreveu:
>>>>>>>
>>>>>>>> Mas e como pegar o domínio independente da URL conter um subdomínio
>>> ou
>>>>>>>> não?
>>>>>>>>
>>>>>>>> Por exemplo, para todas as entradas abaixo, a saída deveria ser
>>>>>>>> somente "unix.com":
>>>>>>>>
>>>>>>>> www.unix.com/lele/lili
>>>>>>>> unix.com/nada
>>>>>>>> mail.unix.com
>>>>>>>>
>>>>>>>> Eu tentei com o sed aqui e não consegui. Seria uma boa função para
>>>>>>>> somar às funções zz. :)
>>>>>>>>
>>>>>>>> Abraços.
>>>>>>>>
>>>>>>>> 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/9/28 Rodolpho Costa Stach<address@hidden
>>>>>>>> <mailto:dukercs%40gmail.com>>:
>>>>>>>>> hum vou estudar :D $man cut
>>>>>>>>> vlw cara
>>>>>>>>>
>>>>>>>>> por enquanto o script tá assim
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> # Script para adicionar site à lista branca
>>>>>>>>> # Criado em 28/09/2011
>>>>>>>>> # Autor: Rodolpho Costa Stach
>>>>>>>>> #!/bin/bash
>>>>>>>>> versao="1.0.1b"
>>>>>>>>>
>>>>>>>>> fpath="/etc/squiddir/listabranca.txt"
>>>>>>>>>
>>>>>>>>> testapath(){
>>>>>>>>> if [ -e $fpath ]; then
>>>>>>>>> args
>>>>>>>>> else
>>>>>>>>> echo -e "\e[31;1m ERRO: "
>>>>>>>>> echo -e "\e[37;1m O arquivo de lista não foi localizado em
>>>>>>>> $fpath."
>>>>>>>>> echo -e "\e[37;1m Use $0 --novalista para definir o novo local do
>>>>>>>>> arquivo"
>>>>>>>>> sair
>>>>>>>>> fi
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> sair(){
>>>>>>>>> exit 1
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> args(){
>>>>>>>>> if [ "$1" = "" ];then
>>>>>>>>> echo -e "\e[31;1m ERRO: "
>>>>>>>>> echo -e "\e[37;1m Use $0 + domínio do site a ser liberado."
>>>>>>>>> sair
>>>>>>>>> else
>>>>>>>>> contar
>>>>>>>>> fi
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> contar(){
>>>>>>>>> count=$(grep -c $1 $fpath)
>>>>>>>>> if [ $count>= 1 ]; then
>>>>>>>>> echo -e "\e[31;1m ERRO: "
>>>>>>>>> echo -e "\e[37;1m Este domínio já existe cadastrado"
>>>>>>>>> else
>>>>>>>>> echo $1>>  $fpath
>>>>>>>>> fi
>>>>>>>>> }
>>>>>>>>> ajuda(){
>>>>>>>>> echo -e "\e[40;32;1mAjuda"
>>>>>>>>> echo -e "\e[40;37;1mUse o $0 para adicionar somente o domínio à
>>>>>>>>> lista branca de sites."
>>>>>>>>> echo -e "\e[40;31mOpções: "
>>>>>>>>> echo -e -n "\e[40;32;1m--help --ajuda -h "
>>>>>>>>> echo -e "\e[40;37;1mExibe essa tela de ajuda"
>>>>>>>>> echo -e -n "\e[40;32;1m--novalista "
>>>>>>>>> echo -e "\e[40;37;1mAltera o arquivo da lista branca para o
>>>>>>>> arquivo
>>>>>>>>> informado"
>>>>>>>>> echo -e "\e[40;31;1mUSE: $0 --novalista
>>>>>>>>> /caminho/completo/para/a/novalista.txt"
>>>>>>>>> echo -e ""
>>>>>>>>> }
>>>>>>>>> case "$1" in
>>>>>>>>> --help|-h|--ajuda)
>>>>>>>>> ajuda ;;
>>>>>>>>> --novalista)
>>>>>>>>> echo "Ainda irei estudar como fazer isso :D "
>>>>>>>>> echo "Você entrou com o caminho"
>>>>>>>>> ;;
>>>>>>>>> *)
>>>>>>>>> testapath
>>>>>>>>> ;;
>>>>>>>>> esac
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Em 28 de setembro de 2011 17:49, Moacir Souza
>>>>>>>> <address@hidden<mailto:moacir.souza%40gmail.com>>escreveu:
>>>>>>>>>> **
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Outro cut..
>>>>>>>>>>
>>>>>>>>>> $ cut -d "." -f 2-
>>>>>>>>>>
>>>>>>>>>> 2011/9/28 Rodolpho Costa Stach<address@hidden
>>>>>>>> <mailto:dukercs%40gmail.com>>:
>>>>>>>>>>> Sim mas com esse delimitador está saindo o www. tem como tirar
>>> ele ?
>>>>>>>>>>> Em 28 de setembro de 2011 17:10, Marcelo Andrade
>>>>>>>> <address@hidden<mailto:mfandrade%40gmail.com>
>>>>>>>>>>> escreveu:
>>>>>>>>>>>
>>>>>>>>>>>> **
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 2011/9/28 Rodolpho Costa Stach<address@hidden
>>>>>>>> <mailto:dukercs%40gmail.com>>
>>>>>>>>>>>>> Gente estou ainda criando o danado do script para adicionar
>>>>>>>> sites em
>>>>>>>>>> uma
>>>>>>>>>>>>> lista branca nisso pensei em controle de erro e gostaria de
>>>>>>>> caso eu
>>>>>>>>>>>> coloque
>>>>>>>>>>>>> um site como
>>>>>>>>>>>>>
>>> http://www.unix.com/shell-programming-scripting/36565-exit-shell-script.htmlem
>>>>>>>>>>>>> uma variável que eu pegue só o
>>>>>>>>>>>>> unix.com ou se fosse .com.br pegasse só o unix.com.br para que
>>>>>>> eu
>>>>>>>>>> possa
>>>>>>>>>>>>> testar se esse domínio já não existe.
>>>>>>>>>>>> Um cut -f3 -d'/' não resolve?
>>>>>>>>>>>>
>>>>>>>>>>>> Atts.
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> MARCELO F ANDRADE
>>>>>>>>>>>> Belem, Amazonia, Brazil
>>>>>>>>>>>>
>>>>>>>>>>>> "I took the red pill"
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>> [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
>>>>>>>> <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
>>>>>>>>>>> ----------------------------------------------------------
>>>>>>>>>>> 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
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> ==========================================
>>>>>>>>>> Moacir da Cruz Souza Filho
>>>>>>>>>>
>>>>>>>>>> Analista de Sistemas: Suporte Unix Avançado
>>>>>>>>>> Mestrando em Ciências da Computação
>>>>>>>>>> Bacharel em Engenharia da Computação
>>>>>>>>>> Técnico em Eletrônica
>>>>>>>>>> Linux user #449600
>>>>>>>>>> ==========================================
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> [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
>>>>>>>> <mailto:shell-script-unsubscribe%40yahoogrupos.com.br>
>>>>>>>>> ----------------------------------------------------------
>>>>>>>>> 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]
>>>>>>
>>>>>>
>>>>>>
>>>>>> ------------------------------------
>>>>>>
>>>>>> ----------------------------------------------------------
>>>>>> 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]
>>>>>
>>>>>
>>>>>
>>>>
>>>> [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]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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]