Você pode fazer isso totalmente no Bash, sem comandos externos, usando divisão de palavras e expansão de parâmetros . É até relativamente curto:
[email protected]
USER=${EMAIL_ADDRESS%@*}
WORDS=( $(IFS=._- ; printf '%s ' $USER) )
echo "${WORDS[@]^}"
Vou pegar esta linha por linha:
USER=${EMAIL_ADDRESS%@*}
Isso define a variável USER
como a parte de EMAIL_ADDRESS
que não corresponde a @*
no final, ou seja, removendo o nome de domínio e deixando apenas a parte do usuário do endereço.
WORDS=( $(IFS=._- ; printf '%s ' $USER) )
Isso cria uma inicialização de um array WORDS
. Os valores iniciais são fornecidos pelos resultados da substituição do comando $(...)
.
As substituições de comandos são executadas em um subshell , para que possamos alterar os valores das variáveis com segurança sem afetar seus valores em nossa casca principal. Isso inclui IFS
, que é usado durante divisão de palavras como o grupo de caracteres que fazem com que uma nova palavra comece. Cada um dos .
, _
e -
formará um limite de palavra e você poderá adicionar novos caracteres, se desejar.
Depois de alterar o IFS
, usamos printf
para imprimir as palavras $USER
foram divididas, o que é um pouco mais seguro que echo
.
echo "${WORDS[@]^}"
Finalmente, imprimimos o resultado. A [@]
é a expansão da matriz, como você sabe, e a seguir, ^
maiúsculas do primeiro caractere da palavra (estritamente, a primeira correspondência do padrão padrão ?
).
O resultado final da execução deste script é a saída:
This Is A Very Long Email Id
como esperado.
Se algum endereço de email contiver metacaracteres de shell *
, ?
, etc, eles serão expandidos como curingas. Você pode envolver a linha WORDS=
em set -f
/ set +f
para evitar isso, mas há outra opção (cortesia de Glenn Jackman nos comentários).
IFS=._- read -r -a WORDS <<<"${EMAIL_ADDRESS%@*}"
echo "${WORDS[@]^}"
Isso usa read -a
para preencher uma matriz com os resultados de palavra splitting, e o resto (condensado) como antes. Acho isso menos claro para ler do que a inicialização explícita da matriz, mas é uma opção.
É importante notar também que os endereços de e-mail podem ter uma grande variedade de formulários , incluindo aqueles com espaços, aspas e caracteres de colchetes neles, e isso não lida com esses endereços (nem é realmente possível fazê-lo de acordo com a especificação do problema).