1

我有以下输入

  1. MyComposite[2.1],partition=default,mode=active,state=on,isDefault=true,deployedTime=2012-05-07T15:35:22.473-07:00
  2. MessageManager[1.0],partition=default,mode=active,state=on,isDefault=true,deployedTime=2012-05-07T15:37:14.137-07:00
  3. SimpleApproval[1.0],partition=default,mode=active,state=on,isDefault=true,deployedTime=2012-05-07T15:28:39.599-07:00

我有一个脚本,可以从文件中逐行解析输入,但我不知道如何将每行中的单个参数提取到局部变量中,以便执行其他过程

到目前为止,我正在尝试以下操作:

#!/bin/ksh

file="output"

compositeName="foo" ci=0
# while loop while read line do
        # display line or do somthing on $line
        if echo "$line" | egrep -q '\[[0-9]*\.[0-9]*\].*?(mode=active).*?
           (state=on)'  then compositeName=$( echo "$line" | egrep '[0-9]*' ) 
        echo "$compositeName" 
               #echo "$line"
        fi
         done <"$file"

我很想从这个字符串中只提取两个值,第一个单词和括号之间的浮点数

IE:

名称 = MyComposite 版本 = 2.1

有任何想法吗?

4

1 回答 1

2

我不确定这些行号是否在文件中。如果没有,您可以这样做:

#!/usr/bin/env ksh

while IFS="," read nameVersion line; do
  name="${nameVersion%%\[*}"
  version="${nameVersion//*\[+([0-9.])\]*/\1}"
  print "name=$name version=$version"
done < "$file"

如果文件中有行号,则将上述脚本中的名称分配更改为name="${nameVersion//+([0-9]).+( )+(*)\[*/\3}"

于 2012-05-08T18:25:19.620 回答