Pour extraire joebloggs
de cette chaîne dans bash en utilisant l'expansion des paramètres sans aucun processus supplémentaire ...
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
Cela ne dépend pas d' joebloggs
être à une profondeur particulière du chemin.
Résumé
Un aperçu de quelques modes d'expansion des paramètres, pour référence ...
${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
Cela #
signifie donc correspondre depuis le début (pensez à une ligne de commentaire) et %
signifie depuis la fin. Une instance signifie la plus courte et deux instances la plus longue.
Vous pouvez obtenir des sous-chaînes en fonction de la position à l'aide de nombres:
${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)
Vous pouvez également remplacer des chaînes ou des modèles particuliers en utilisant:
${MYVAR/search/replace}
Le pattern
est dans le même format que la correspondance de nom de fichier, donc *
(tous les caractères) est commun, souvent suivi d'un symbole particulier comme /
ou.
Exemples:
Étant donné une variable comme
MYVAR="users/joebloggs/domain.com"
Supprimez le chemin en laissant le nom du fichier (tous les caractères jusqu'à une barre oblique):
echo ${MYVAR##*/}
domain.com
Supprimez le nom du fichier en laissant le chemin (supprimez la correspondance la plus courte après la dernière /
):
echo ${MYVAR%/*}
users/joebloggs
Obtenez juste l'extension de fichier (supprimez tout avant la dernière période):
echo ${MYVAR##*.}
com
REMARQUE: pour effectuer deux opérations, vous ne pouvez pas les combiner, mais devez les affecter à une variable intermédiaire. Donc, pour obtenir le nom du fichier sans chemin ni extension:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain