Per estrarre joebloggs
da questa stringa in bash utilizzando l'espansione dei parametri senza alcun processo aggiuntivo ...
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
Non dipende joebloggs
dall'essere a una particolare profondità del percorso.
Sommario
Una panoramica di alcune modalità di espansione dei parametri, per riferimento ...
${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
Quindi #
significa corrispondenza dall'inizio (pensa a una riga di commento) e %
significa dalla fine. Un'istanza significa più breve e due istanze significa più lunga.
Puoi ottenere sottostringhe in base alla posizione utilizzando i numeri:
${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)
Puoi anche sostituire stringhe o pattern particolari usando:
${MYVAR/search/replace}
Il pattern
è nello stesso formato di file-name corrispondente, in modo *
(qualsiasi carattere) è comune, spesso seguite da un simbolo particolare come /
o.
Esempi:
Data una variabile come
MYVAR="users/joebloggs/domain.com"
Rimuovi il percorso lasciando il nome del file (tutti i caratteri fino a una barra):
echo ${MYVAR##*/}
domain.com
Rimuovi il nome del file, lasciando il percorso (elimina la corrispondenza più breve dopo l'ultima /
):
echo ${MYVAR%/*}
users/joebloggs
Ottieni solo l'estensione del file (rimuovi tutto prima dell'ultimo punto):
echo ${MYVAR##*.}
com
NOTA: per eseguire due operazioni, non è possibile combinarle, ma è necessario assegnarle a una variabile intermedia. Quindi, per ottenere il nome del file senza percorso o estensione:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain