2012-05-17 85 views
5

例如,我有一個字符串:[email protected]用符號bash分割字符串

我需要得到這個字符串的test2部分。我怎樣才能用bash做到這一點?

+1

可能重複[Bash中字符串操作。 。 。刪除主要部分](http://stackoverflow.com/questions/2680274/string-manipulation-in-bash-removing-leading-section) – Kaz

回答

19

使用Parameter Expansion

str='[email protected]' 
echo "${str#*@}" 
  1. #人物說卸下擴展的模式匹配的最小前綴。
  2. %字符表示刪除與模式匹配的最小擴展後綴。(所以你可以做"${str%@*}"得到"test1"一部分。)
  3. /字符意味着卸下擴展符合以下圖案的最小和第一子。 Bash有它,但它不是POSIX。

如果您將模式字符翻倍,則它會與貪婪匹配。

  1. ##表示刪除與模式匹配的最大擴展前綴。
  2. %%表示刪除與圖案匹配的最大後綴的擴展。
  3. //表示刪除所有匹配模式的擴展子串。
+0

如何更改此選項以打印test1而不是test2? –

+0

@ChrisF我已經擴展了我的答案,以說明如何做到這一點。 – kojiro

3
echo "[email protected]" | sed 's/.*@//' 
+2

或者,在bash中,'xxx =「test1 @ test2」; sed's /.*@//'<<< $ x'。 –

+0

@JonathanLeffler我知道你在這裏的意思,但是你是不是錯過了一些'x'es? – kojiro

+0

嗯......是的,它看起來像'dos equis'逃脫了。編輯評論有點晚了... –