1

次の入力があります

  1. MyComposite[2.1]、パーティション = デフォルト、モード = アクティブ、状態 = オン、isDefault = true、展開時間 = 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

ファイルから入力を1行ずつ解析するスクリプトがありますが、各行から個々のパラメーターをローカル変数に抽出する方法がわからないため、追加のプロセスを実行できます

これまでのところ、次のことを試しています。

#!/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"

私は、この文字列から最初の単語と括弧の間の浮動小数点数の 2 つの値のみを抽出する方法を探しています。

すなわち:

名前 = 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 に答える