在Unix中分割字符串

我正在尝试在UNIX shell脚本中拆分字符串,但是我无法弄清楚。任何帮助,将不胜感激。 下面是示例

    olap4j-xmla-1.0.1.500,olap4j-xmla-1.2.0,olap4j-xmla-1.2.0.snAPSHOT,olap4j-xmla-1.2.0.RELEASE

上面的字符串将被拆分,以便将输出存储在不同的变量中,例如

  var1=olap4j-xmla    var2=1.0.1.500

  var1=olap4j-xmla    var2=1.2.0

  var1=olap4j-xmla    var2=1.2.0    var3=snAPSHOT

  var1=olap4j-xmla    var2=1.2.0    var3=RELEASE
guopu8483 回答:在Unix中分割字符串

使用字符串替换:

s='olap4j-xmla-1.0.1.500'
read var1 var2 <<< "${s%-*} ${s##*-}"

现在检查变量:

declare -p var1 var2
declare -- var1="olap4j-xmla"
declare -- var2="1.0.1.500"

更新

感谢下面的pjh评论,我已经意识到OP在某些情况下需要3而不是2。

考虑到这一点,我认为遵循sed会更好:

sed -E 's/^(.+)-([0-9.]+)(\.([^0-9]+))?$/\1 \2 \4/' <<< "olap4j-xmla-1.2.0.SNAPSHOT"
olap4j-xmla 1.2.0 SNAPSHOT

sed -E 's/^(.+)-([0-9.]+)(\.([^0-9]+))?$/\1 \2 \4/' <<< "olap4j-xmla-1.2.0"
olap4j-xmla 1.2.0

如上例所示,可以将sed的输出馈送到read

,
#!/bin/bash
while read LINE; do
  var1=$(cut -d '-' -f1,2 <<< "$LINE")
  tmp=$(cut -d '-' -f3 <<< "$LINE")
  var2=$(sed 's/\(.*\)\.[a-zA-Z]*$/\1/' <<< "$tmp")
  var3=$(sed -n 's/.*\.\([a-zA-Z]*$\)/\1/p' <<< "$tmp")
  echo -e "var1=$var1; var2=$var2; var3=$var3"
done < file.txt

输出:

  var1=olap4j-xmla; var2=1.0.1.500; var3=
  var1=olap4j-xmla; var2=1.2.0; var3=
  var1=olap4j-xmla; var2=1.2.0; var3=SNAPSHOT
  var1=olap4j-xmla; var2=1.2.0; var3=RELEASE
本文链接:https://www.f2er.com/3124887.html

大家都在问