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/')
说明:
:打印foo变量的值并将其输出传递给echo“$foo”| sed的/\([^-]*-[^-]*\)-./\1/”
命令。在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”变量替换为secondsed
命令,只是为了让它看起来更简单易读:)second=$(echo“$foo”| sed-E“s/”$first“-\(.*\)/\1/”)
@User123,是的,很酷,谢谢你让我知道,我已经添加了解决方案,加上了学分、干杯和愉快的学习:)