25

例如,我有一个字符串:test1@test2.

我需要得到test2这个字符串的一部分。我怎么能用 bash 做到这一点?

4

4 回答 4

40

使用参数扩展

str='test1@test2'
echo "${str#*@}"
  1. #字符表示删除与模式匹配的扩展的最小前缀。
  2. %字符表示删除与模式匹配的扩展的最小后缀。(所以你可以做得到"${str%@*}""test1"部分。)
  3. /字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。Bash 有它,但它不是 POSIX。

如果将模式字符加倍,它会贪婪地匹配。

  1. ##表示删除匹配模式的扩展的最大前缀。
  2. %%表示删除匹配模式的扩展的最大后缀。
  3. //表示删除与模式匹配的扩展的所有子字符串。
于 2012-05-17T15:18:51.200 回答
25
echo "test1@test2" | awk -F "@" '{print $2}'
于 2012-05-17T19:02:45.833 回答
7

Bash 中的另一种方式:

IFS=@ read -r left right <<< "$string"
echo "$right"

请注意,此技术还提供了字符串的第一部分:

echo "$left"
于 2012-05-18T01:01:09.610 回答
4
echo "test1@test2" | sed 's/.*@//'
于 2012-05-17T15:18:49.850 回答