2010-12-01 32 views
2

Je modifie un script qui lit dans un email d'utilisateur. C'est très simple, trop simple.Script Bash, comment supprimer la sous-chaîne, insensible à la casse?

echo -n "Please enter your example.com email address: " 
read email 
email=${email%%@example.com} # removes trailing @example.com from email 
echo "email is $email" 

Cela fonctionne, mais seulement pour minuscule @ example.com. Comment est-ce que j'ai pu modifier ceci pour enlever le @ traçage final.com, insensible à la casse?

Répondre

5

Si vous avez bash 4:

email=${email,,} 
email=${email%%@example.com} 

Sinon, peut-être simplement utiliser tr:

email=$(echo "${email}" | tr "A-Z" "a-z") 
email=${email%%@example.com} 

Mise à jour:

Si vous êtes désireux de dépouiller l'hôte (tout hôte) alors peut-être c'est vraiment ce que vous voulez:

email=${email%%@*} 
+0

je ne veux pas convertir l'email en minuscules. quel que soit le cas où ils entrent, je veux préserver – basher1

+0

Il convient de noter que ces deux choses vont également tourner toutes les parties de l'adresse en minuscules ... – thkala

+0

Peut-être que vous voulez juste cela alors: email = $ {email %% @ * } – kanaka

1

Que diriez-vous d'utiliser sed? Notez l'indicateur 'i' dans la commande sed substitution qui demande une correspondance insensible à la casse.

3

Pour Bash 3.2 et plus:

shopt -s nocasematch 
email='[email protected]' 
pattern='^(.*)@example.com$' 
[[ $email =~ $pattern ]] 
email=${BASH_REMATCH[1]} # result: JoHnDoE 
0
echo -n "Please enter your example.com email address: " 
read _email 
_email=$(echo $_email | awk 'BEGIN{ FS="@" } {print $1}') 
echo $_email 

et pour le courrier électronique de transfert Minuscules vous pouvez utiliser déclarer, comme

déclare email -l = $ email

2

Voilà encore un autre (quoique un peu long) prennent dessus:

email='[email protected]' 
email=${email%%@[Ee][Xx][Aa][Mm][Pp][Ll][Ee].[Cc][Oo][Mm]} 
echo "email is $email"