例如,我有一个字符串:test1@test2
。
我需要获取此字符串的test2
部分。我怎么能用bash做到这一点?
答案 0 :(得分:27)
str='test1@test2'
echo "${str#*@}"
#
字符显示删除与模式匹配的扩展的最小前缀。 %
字符表示删除与模式匹配的扩展的最小后缀。(因此,您可以"${str%@*}"
获取"test1"
部分。) /
字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。 Bash有它,但它不是POSIX。如果你将模式字符翻倍,它会贪婪地匹配。
##
表示删除与该模式匹配的扩展的最大前缀。 %%
表示删除与模式匹配的扩展的最大后缀。 //
表示删除与该模式匹配的扩展的所有子字符串。 答案 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/.*@//'