Extraindo substring da variável de ambiente

6

Em um script bash ou zsh, como posso extrair o host de um url, e. unix.stackexchange.com de http://unix.stackexchange.com/questions/ask , se este último estiver em uma variável de ambiente?

    
por Toothrot 26.02.2017 / 20:57

4 respostas

8

Você pode usar a expansão de parâmetro, que está disponível em qualquer shell compatível com POSIX.

$ export FOO=http://unix.stackexchange.com/questions/ask
$ tmp="${FOO#*//}" # remove http://
$ echo "${tmp%%/*}" # remove everything after the first /
unix.stackexchange.com

Um método mais confiável, porém mais feio, seria usar um analisador de URL real. Aqui está um exemplo para python :

$ echo "$FOO" | python -c 'import urlparse; import sys;  print urlparse.urlparse(sys.stdin.read()).netloc' 
unix.stackexchange.com
    
por 26.02.2017 / 21:11
3

Se todos os URLs seguirem esse padrão, eu tenho esse truque curto e feio para você:

echo "$FOO" | cut -d / -f 3
    
por 27.02.2017 / 09:44
2

Pode ser feito também com grupos de regex:

$ a="http://unix.stackexchange.com/questions/ask"
$ perl -pe 's|(.*//)(.*?)(/.*)||' <<<"$a"
unix.stackexchange.com
    
por 26.02.2017 / 22:00
2

Você pode fazer isso de várias maneiras, sendo algumas delas:

export _URL='http://unix.stackexchange.com/questions/ask'

echo "$_URL" | sed -ne 'y|/|\n|;s/.*\n\n/;P'

expr "$_URL" : 'http://\([^/]*\)'

echo "$_URL" |  perl -lpe '($_) = m|^http://\K[^/]+|g'

perl -le 'print+(split m{/}, $ENV{_URL})[2]'

(set -f; IFS=/; set -- $_URL; echo "$3";)
    
por 27.02.2017 / 04:32