Wie kann ich mithilfe der Zeichenfolgenmanipulation zwei unterschiedliche Teile einer Zeichenfolge erkennen und entfernen?

Wie kann ich mithilfe der Zeichenfolgenmanipulation zwei unterschiedliche Teile einer Zeichenfolge erkennen und entfernen?

Ich erstelle ein Skript, das http:// oder https:// aus einer URL entfernt. Bisher habe ich es geschafft, http:// zu entfernen, aber ich weiß nicht, wie ich es ändern kann, damit es die eingegebenen Zeichen entfernt. Hier ist der bisherige Code:

domain=$1

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

echo "$inp"

Ich brauche Code, der ungefähr so ​​aussieht:

domain=$1

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

echo "$inp"

Wie würde ich dabei vorgehen?

Antwort1

Außer zweimaligem Ausführen:

Erweiterten Glob verwenden:

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

Verwenden der internen Bash-Variable BASH_REMATCH:

Erforderliches Protokoll:

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

Kein Protokoll erforderlich:

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

Antwort2

POSIX-Shell-Skript:

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

Prüfen:

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

Ausgabe:

foo.bar/baz
foo.bar/baz

Antwort3

Mach es einfach zweimal:

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

verwandte Informationen