Pour extraire joebloggs
de cette chaîne en bash en utilisant l'expansion des paramètres sans processus supplémentaire...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.example"
NAME=${MYVAR%:*} # conserver la partie avant le deux-points
NAME=${NAME##*/} # conserver la partie après le dernier slash
echo $NAME
Ne dépend pas de joebloggs
étant à une profondeur particulière dans le chemin.
Résumé
Un aperçu de quelques modes d'expansion de paramètres, pour référence...
${MYVAR#modèle} # supprimer la correspondance la plus courte du modèle depuis le début
${MYVAR##modèle} # supprimer la correspondance la plus longue du modèle depuis le début
${MYVAR%modèle} # supprimer la correspondance la plus courte du modèle depuis la fin
${MYVAR%%modèle} # supprimer la correspondance la plus longue du modèle depuis la fin
Donc #
signifie correspondance depuis le début (pensez à une ligne de commentaire) et %
signifie depuis la fin. Une instance signifie la plus courte et deux instances signifie la plus longue.
Vous pouvez obtenir des sous-chaînes en fonction de la position en utilisant des chiffres :
${MYVAR:3} # Supprimer les trois premiers caractères (laissant 4..fin)
${MYVAR::3} # Renvoyer les trois premiers caractères
${MYVAR:3:5} # Les cinq caractères suivants après avoir supprimé les trois premiers (caractères 4-9)
Vous pouvez également remplacer des chaînes ou modèles particuliers en utilisant :
${MYVAR/recherche/remplacement}
Le modèle
est dans le même format que la correspondance de noms de fichier, donc *
(n'importe quels caractères) est commun, suivi souvent d'un symbole particulier comme /
ou .
Exemples :
Étant donné une variable comme
MYVAR="users/joebloggs/domain.example"
Supprimer le chemin laissant le nom de fichier (tous les caractères jusqu'à un slash) :
echo ${MYVAR##*/}
domain.example
Supprimer le nom de fichier, laissant le chemin (supprimer la correspondance la plus courte après le dernier /
) :
echo ${MYVAR%/*}
users/joebloggs
Obtenir juste l'extension du fichier (supprimer tout avant le dernier point) :
echo ${MYVAR##*.}
example
REMARQUE : Pour effectuer deux opérations, vous ne pouvez pas les combiner, mais devez les assigner à une variable intermédiaire. Donc pour obtenir le nom de fichier sans chemin ni extension :
NAME=${MYVAR##*/} # supprimer la partie avant le dernier slash
echo ${NAME%.*} # depuis la nouvelle variable, retirer la partie après le dernier point
domain