如何在shell脚本中将字符串解析为两个值

时间:2014-11-06 09:45:31

标签: shell parsing

我是shell脚本的新手,我想在shell脚本中解析以下字符串:

aspj-arch-bpm-oracle-11.1.1.7-6.2.1.10000.jar
aspj-arch-ecm-oracle-wcc-11.1.1.7-6.2.1.10000.jar
aspj-arch-rules-opa-10.4.2-server-6.0.2.10000.jar
spring-webmvc-portlet-3.0.5.RELEASE.jar

这里我想读取所有字符串,我需要两个值。

value1 = aspj-arch-bpm-oracle-11.1.1.7
value2 = 6.2.1.10000

和.jar应该删除。

这里我可以通过使用for循环

来读取所有字符串
for i in *
do
echo "$i"
done 

但在这里我想要打印字符串,我想要两个像这样的值

for i in *
do 
value1= "some caommand"
value2= "some command"
echo $value1
echo $value2
done.

如何使用shell脚本执行此操作。

1 个答案:

答案 0 :(得分:0)

您可以使用parameter substitution

while read line; do 
    value1=${line%-*.jar}
    value2=${line##*-}
    value2=${value2%.jar}

    echo "Value 1: $value1"
    echo "Value 2: $value2"
done < input_file.txt

对于您提供的输入,这会给出:

Value 1: aspj-arch-bpm-oracle-11.1.1.7
Value 2: 6.2.1.10000
Value 1: aspj-arch-ecm-oracle-wcc-11.1.1.7
Value 2: 6.2.1.10000
Value 1: aspj-arch-rules-opa-10.4.2-server
Value 2: 6.0.2.10000
Value 1: spring-webmvc-portlet
Value 2: 3.0.5.RELEASE

如果您想在一个命令中获取sed,也可以使用value2

value2=$(sed 's/.*-\(.*\).jar/\1/g' <<< $line)