So extrahieren Sie joebloggs
aus dieser Zeichenfolge in Bash mithilfe der Parametererweiterung ohne zusätzliche Prozesse ...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
Hängt nicht davon ab, joebloggs
dass Sie sich in einer bestimmten Tiefe des Pfades befinden.
Zusammenfassung
Eine Übersicht einiger Parametererweiterungsmodi als Referenz ...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
Bedeutet #
also Übereinstimmung von Anfang an (denken Sie an eine Kommentarzeile) und %
bedeutet von Ende an. Eine Instanz bedeutet die kürzeste und zwei Instanzen die längste.
Sie können Teilzeichenfolgen basierend auf der Position mithilfe von Zahlen erhalten:
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
Sie können bestimmte Zeichenfolgen oder Muster auch durch Folgendes ersetzen:
${MYVAR/search/replace}
Das pattern
hat das gleiche Format wie der Dateinamenabgleich, daher ist *
(beliebige Zeichen) üblich, häufig gefolgt von einem bestimmten Symbol wie /
oder.
Beispiele:
Gegeben eine Variable wie
MYVAR="users/joebloggs/domain.com"
Entfernen Sie den Pfad, der den Dateinamen hinterlässt (alle Zeichen bis zu einem Schrägstrich):
echo ${MYVAR##*/}
domain.com
Entfernen Sie den Dateinamen und verlassen Sie den Pfad (löschen Sie die kürzeste Übereinstimmung nach der letzten /
):
echo ${MYVAR%/*}
users/joebloggs
Holen Sie sich nur die Dateierweiterung (entfernen Sie alle vor dem letzten Zeitraum):
echo ${MYVAR##*.}
com
HINWEIS: Um zwei Operationen auszuführen , können Sie sie nicht kombinieren, sondern müssen einer Zwischenvariablen zugewiesen werden. So erhalten Sie den Dateinamen ohne Pfad oder Erweiterung:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain