String 使用带符号的bash拆分字符串
例如,我有一个字符串:String 使用带符号的bash拆分字符串,string,bash,sed,awk,String,Bash,Sed,Awk,例如,我有一个字符串:test1@test2 我需要得到这个字符串的test2部分。如何使用bash实现这一点?使用: echo "test1@test2" | sed 's/.*@//' #字符表示删除与模式匹配的扩展的最小前缀 %字符表示删除与模式匹配的扩展的最小后缀。(因此您可以执行“${str%@*}”来获取“test1”部分。) /字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。Bash有,但不是POSIX 如果将模式字符加倍,它将贪婪地匹配 ##表示删除与模式匹配的扩展的最
test1@test2
我需要得到这个字符串的test2
部分。如何使用bash实现这一点?使用:
echo "test1@test2" | sed 's/.*@//'
#
字符表示删除与模式匹配的扩展的最小前缀%
字符表示删除与模式匹配的扩展的最小后缀。(因此您可以执行“${str%@*}”
来获取“test1”
部分。)/
字符表示删除与以下模式匹配的扩展的最小和第一个子字符串。Bash有,但不是POSIX##
表示删除与模式匹配的扩展的最大前缀%%
表示删除与模式匹配的扩展的最大后缀/
表示删除与模式匹配的扩展的所有子字符串IFS=@ read -r left right <<< "$string"
echo "$right"
或者,在bash中,
xxx=”test1@test2"; sed's/*@/'@JonathanLeffler我知道你在这里的意思,但是你是不是遗漏了一些x
es?嗯……是的,看起来像是“dos equis”逃走了。编辑注释有点晚了……或者,在bash中,awk-F“@”{print$2}但这并没有分割字符串,它只打印第二部分。您不能在bash中对“${awk-F'@'{print$2}'[@]}”中的子字符串执行此操作。
可能的重复项应将IFS恢复到空格:IFS=”“。因为bash使用IFS来解析命令行参数。@StepanDyatkovskiy:IFS
只是在执行环境read
中临时被赋予一个新值。当变量赋值以这种方式位于命令之前时,就会发生这种情况。
echo "test1@test2" | awk -F "@" '{print $2}'
IFS=@ read -r left right <<< "$string"
echo "$right"
echo "$left"