2010-12-01 3 views
2

Ich ändere ein Skript, das eine Benutzer-E-Mail einliest. Es ist sehr einfach, zu einfach.Bash-Scripting, wie wird der nachgestellte Teilstring entfernt, Groß- und Kleinschreibung nicht beachtet?

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" 

Dies funktioniert, aber nur für Kleinbuchstaben @ example.com. Wie könnte ich dies ändern, um das nachgestellte @ example.com zu entfernen, ohne Berücksichtigung der Groß- und Kleinschreibung?

Antwort

5

Wenn Sie bash 4:

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

Ansonsten vielleicht nur tr verwenden:

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

aktualisieren:

Wenn Sie nur wollen, um den Host strippen (jede Host) dann ist das vielleicht wirklich was du willst:

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

Ich möchte die E-Mail nicht in Kleinbuchstaben umwandeln. in jedem Fall, den sie eingeben, möchte ich – basher1

+0

beibehalten Es sollte beachtet werden, dass diese beiden auch alle Teile der Adresse zu Kleinbuchstaben drehen werden ... – thkala

+0

Vielleicht möchten Sie dies nur dann: email = $ {email %% @ * } – kanaka

1

Wie wäre es mit sed?

email="$(sed 's|@example\.com$||i' <<<"$email")" 

Beachten Sie das Flag 'i' im sed-Ersetzungsbefehl, der die Groß-/Kleinschreibung nicht berücksichtigt.

3

Für Bash 3.2 und höher:

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 

und für die Übertragung E-Mail-Fall senken Sie declare, wie

erklären -l email = $ email

2

Hier können noch ein anderes (obwohl ein bisschen lang) nehmen Sie es an:

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