Para extrair joebloggs
desta string em bash usando a expansão de parâmetro sem nenhum processo extra ...
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
Não depende de joebloggs
estar em uma determinada profundidade no caminho.
Resumo
Uma visão geral de alguns modos de expansão de parâmetro, para referência ...
${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
Portanto, #
significa combinar desde o início (pense em uma linha de comentário) e %
significa partir do final. Uma instância significa o mais curto e duas instâncias significa o mais longo.
Você pode obter substrings com base na posição 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)
Você também pode substituir strings ou padrões específicos usando:
${MYVAR/search/replace}
O pattern
está no mesmo formato da correspondência de nome de arquivo, então *
(qualquer caractere) é comum, geralmente seguido por um símbolo específico como /
ou.
Exemplos:
Dada uma variável como
MYVAR="users/joebloggs/domain.com"
Remova o caminho deixando o nome do arquivo (todos os caracteres até uma barra):
echo ${MYVAR##*/}
domain.com
Remova o nome do arquivo, deixando o caminho (exclua a correspondência mais curta após a última /
):
echo ${MYVAR%/*}
users/joebloggs
Obtenha apenas a extensão do arquivo (remova tudo antes do último período):
echo ${MYVAR##*.}
com
NOTA: Para fazer duas operações, você não pode combiná-las, mas deve atribuir a uma variável intermediária. Portanto, para obter o nome do arquivo sem caminho ou extensão:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain