Como posso usar a manipulação de strings para detectar e remover duas partes diferentes de uma string?

1

Estou fazendo um script que removerá o http: // ou https: // de um URL. Até agora eu tenho que remover o http: //, mas não consigo descobrir como modificá-lo para que ele possa remover ou que eles entraram. Aqui está o código até agora:

domain=$1

inp="${domain//http:'//'}"

echo "$inp"

Estou precisando de código semelhante a este:

domain=$1

inp="${domain//http:'//'} OR ${domain//https:'//'}"

echo "$inp"

Como eu faria isso?

    
por Egrodo 16.05.2016 / 17:37

3 respostas

1

Script de shell POSIX:

inp="${domain#http*://}"

Teste:

for domain in 'https://foo.bar/baz' 'http://foo.bar/baz' ; do \
    inp="${domain#http*://}" ; \
    echo "$inp" ; \
done

Saída:

foo.bar/baz
foo.bar/baz
    
por 16.05.2016 / 19:48
2

Além de correr duas vezes:

Usando o glob estendido:

shopt -s extglob
v=${domain#http?(s)://}
printf "%s\n" "$v"

Usando a variável interna bash BASH_REMATCH :

Exigindo o protocolo:

if [[ "$domain" =~ https?://(.*) ]]
then
    printf "%s\n" "${BASH_REMATCH[1]}"
else
    printf "Not valid input: '%s'\n" "$domain"
fi

Não requerendo protocolo:

[[ "$domain" =~ (https?://)?(.*) ]] && v="${BASH_REMATCH[2]}"
printf "%s\n" "$v"
    
por 16.05.2016 / 17:56
1

Basta fazer isso duas vezes:

inp="${domain//http:'//'}"
inp="${inp//https:'//'}"
    
por 16.05.2016 / 17:44