Para extraer joebloggs
de esta cadena en bash usando la expansión de parámetros sin ningún proceso adicional ...
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
No depende de joebloggs
estar a una profundidad particular en el camino.
Resumen
Una descripción general de algunos modos de expansión de parámetros, como referencia ...
${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
Entonces #
significa coincidir desde el principio (piense en una línea de comentario) y %
significa desde el final. Una instancia significa más corta y dos instancias significa más larga.
Puede obtener subcadenas basadas en la posición usando números:
${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)
También puede reemplazar cadenas o patrones particulares usando:
${MYVAR/search/replace}
Tiene pattern
el mismo formato que la coincidencia de nombre de archivo, por lo que *
(cualquier carácter) es común, a menudo seguido de un símbolo particular como /
o.
Ejemplos:
Dada una variable como
MYVAR="users/joebloggs/domain.com"
Elimine la ruta dejando el nombre del archivo (todos los caracteres hasta una barra):
echo ${MYVAR##*/}
domain.com
Elimine el nombre del archivo, dejando la ruta (elimine la coincidencia más corta después de la última /
):
echo ${MYVAR%/*}
users/joebloggs
Obtenga solo la extensión del archivo (elimine todo antes del último período):
echo ${MYVAR##*.}
com
NOTA: Para hacer dos operaciones, no puede combinarlas, pero debe asignarlas a una variable intermedia. Entonces, para obtener el nombre del archivo sin ruta o extensión:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain