¿Cómo puedo utilizar la manipulación de cadenas para detectar y eliminar dos partes diferentes de una cadena?

¿Cómo puedo utilizar la manipulación de cadenas para detectar y eliminar dos partes diferentes de una cadena?

Estoy creando un script que eliminará http:// o https:// de una URL. Hasta ahora lo tengo para eliminar http://, pero parece que no puedo entender cómo modificarlo para que elimine lo que ingresaron. Aquí está el código hasta el momento:

domain=$1

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

echo "$inp"

Necesito un código que se vea así:

domain=$1

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

echo "$inp"

¿Cómo haría para hacer esto?

Respuesta1

Además de correr dos veces:

Usando globo extendido:

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

Usando la variable interna de bash BASH_REMATCH:

Protocolo requerido:

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

No requiere protocolo:

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

Respuesta2

Script de shell POSIX:

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

Prueba:

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

Producción:

foo.bar/baz
foo.bar/baz

Respuesta3

Solo hazlo dos veces:

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

información relacionada