Bash 如何在第二场比赛中拆分字符串

Bash 如何在第二场比赛中拆分字符串,bash,shell,Bash,Shell,我有一个字符串: foo="re-9619-add-selling-office"; 我想把第二个-(破折号)上的字符串分成variable1和variable2。我想以variable1=re-9619和variable2=添加销售办公室 first=$(echo "$foo" | sed 's/\([^-]*-[^-]*\)-.*/\1/') second=$(echo "$foo" | sed 's/\([^-]*\)-\([^

我有一个字符串:

foo="re-9619-add-selling-office";
我想把第二个
-
(破折号)上的字符串分成variable1和variable2。我想以
variable1=re-9619
variable2=添加销售办公室

first=$(echo "$foo" | sed 's/\([^-]*-[^-]*\)-.*/\1/')
second=$(echo "$foo" | sed 's/\([^-]*\)-\([^-]*\)-\(.*\)/\3/')

我用grep和awk试过了,但现在我不确定该怎么做。

你能试一下吗。其中
第一个
变量的值类似于
re-9619
第二个
外壳变量的值类似于
添加销售办事处

first=$(echo "$foo" | sed 's/\([^-]*-[^-]*\)-.*/\1/')
second=$(echo "$foo" | sed 's/\([^-]*\)-\([^-]*\)-\(.*\)/\3/')
说明:

  • echo“$foo”| sed的/\([^-]*-[^-]*\)-./\1/”
    :打印foo变量的值并将其输出传递给
    sed
    命令。在
    sed
    中,我使用替换功能执行替换,
    \([^-]*-[^-]*\)-.*
    (从值的开始到后面引用中第二次出现
    -
    )。然后用第一个捕获的返回参考值替换整个值,该值将成为唯一的
    re-9619
  • echo“$foo”| sed的/\([^-]*\)-\([^-]*\)-\(.*\)/\3/”
    :逻辑与上述命令相同。使用
    sed
    的替换功能和它的反向引用功能。在这里,我们将在第二次出现
    -
    之后打印所有内容

注意:
second=$(echo“$foo”| sed-E“s/$first-(.*)/\1/”
也可以根据@User123的评论提供帮助。

以下是一种
sed+read
方法:

foo=“re-9619-add-selling-office”
阅读可以使用的var1 var2<,您不需要外部实用程序

$ foo="re-9619-add-selling-office"
$ variable2=${foo#*-*-}
$ variable1=${foo%-"$variable2"}
$
$ echo $variable1
re-9619
$ echo $variable2
add-selling-office
您可以使用:

variable1=$(echo$foo | cut-d'-'-f 1-2)
变量2=$(echo$foo | cut-d'-'-f3-)
结果是:

>echo$variable1
re-9619
>>echo$variable2
添加销售办事处

@RavinderSingh13:我们也可以直接将“first”变量替换为second
sed
命令,只是为了让它看起来更简单易读:)
second=$(echo“$foo”| sed-E“s/”$first“-\(.*\)/\1/”)
@User123,是的,很酷,谢谢你让我知道,我已经添加了解决方案,加上了学分、干杯和愉快的学习:)