2014-04-16 38 views
3

我試過尋找這個,並且找不到我正在尋找的東西。基於令牌的Bash字符串操作

我在Bash/Shell中包含一個包含電子郵件地址的變量。我想提取「@」符號前的所有內容並將其放入新變量中。因此[email protected]應該只是user

所有字符串操作查找長度和位置。位置應該始終爲0,但我真的需要找到「@」標記。

+0

可能重複[?我怎麼拆就在bash分隔符的字符串(http://stackoverflow.com/questions/918886/我怎麼做 - 拆分一個字符串在一個分隔符在bash) – BMW

回答

4

使用參數擴展:

email="[email protected]" 
user=${email%%@*} 
echo "$user" 

${email%%@*}${..}(參數擴展)與部件email,變量; %%,運算符從字符串的末尾刪除最長匹配;和@*,一個匹配@的glob模式,後面跟着任何內容。

+1

+1爲內置方法。我只是展示了另一種方式,但我也會用這種方法。 –

2

您可以使用bash字符串替換(考慮到一個事實,即它是一個電子郵件地址,並不能有兩個@跡象)

$ [email protected] 
$ echo "${var/@*/}" 
user 
+1

不知道爲什麼這個完全有效的答案得到DVed。 +1來補償。 –

1

您可以輕鬆地cut做到這一點,通過一個分隔符分割字符串並提取得到子(或「場」)之一:

echo $ADDRESS | cut [email protected] -f1 
#     ^^
#    delimiter extract first field 
+1

或者使用這裏的字符串'cut -d @ -f1 <<<「$ ADDRESS」'。參數擴展的答案將比產生一個「剪切」過程更快。 –