2014-11-06 36 views
0

我新的shell腳本,我想分析在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 

and .jar should be removed。

在這裏,我可以通過使用循環

for i in * 
do 
echo "$i" 
done 

讀取所有的字符串,但是在這裏我要insted的打印字符串,我想這樣的

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

兩個值我怎麼可以這樣做使用shell腳本。

+0

您能否更具體地瞭解您的規則想申請?看起來,在你給出的單例中,在工作中有一條規則,在版本號(?)內部的第一個「-'分割,但是這個推斷(你只給出了沒有單個評論的例子!)不適用於您向我們展示的其他輸入行。也許其他人可以幫助,但肯定我不能... PS如果你的問題沒有澄清,它應該得到一個投票。 – gboffi 2014-11-06 10:23:35

回答

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)