用符号的bash拆分字符串

时间:2012-05-17 15:17:57

标签: string bash sed awk

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

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

4 个答案:

答案 0 :(得分:27)

使用Parameter Expansion

str='test1@test2'
echo "${str#*@}"
  1. #字符显示删除与模式匹配的扩展的最小前缀。
  2. %字符表示删除与模式匹配的扩展的最小后缀。(因此,您可以"${str%@*}"获取"test1"部分。)
  3. /字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。 Bash有它,但它不是POSIX。
  4. 如果你将模式字符翻倍,它会贪婪地匹配。

    1. ##表示删除与该模式匹配的扩展的最大前缀。
    2. %%表示删除与模式匹配的扩展的最大后缀。
    3. //表示删除与该模式匹配的扩展的所有子字符串。

答案 1 :(得分:13)

echo "test1@test2" | awk -F "@" '{print $2}'

答案 2 :(得分:6)

Bash的另一种方式:

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

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

echo "$left"

答案 3 :(得分:3)

echo "test1@test2" | sed 's/.*@//'