2012-02-12 13 views
1

私はラインの未知の数が含まれているテストと呼ばれるファイルを持っていますそれぞれのラベルと各タイプを個別の変数に格納するか、配列に格納することができます。bashスクリプト変数にそれぞれの行をテキストファイルを読み込んで出力する

ファイルに出力ラベルの内容をでしょう。この例:

awk -vRS="</variable>" '/<variable>/{gsub(/.*<variable>/,"");print}' test >result 

は、しかし、私はこのように私に何かを与えるために、各ラインの内容を必要とし、各タグの内容によってそれらを分離:

label="blogname" 
type="string" 

次に、do whileスクリプトを使用して配列を処理する必要があります。

私は何時間もこの解決策を模索してきたが、運がなかった。

+0

あなたはおそらく出力に行を 'awk'スクリプトを書くことができますそのラベルの後に型を持つ行が続き、bashの 'while'ループで' read'を使って値を配列に入れます。 'read'とbash配列を探します。 – perelman

答えて

0

次のコードは決して使用しないでください。それは問題を解決しますが、bashスクリプトは実際にあなたがそのようなタスクに使用したいものではありません。

#!/bin/sh 
while read line; do 
    label=`echo $line | sed -n 's|^.*<label>\(.*\)</label>.*$|\1|p'` 
    type=`echo $line | sed -n 's|^.*<type>\(.*\)</type>.*$|\1|p'` 
    echo "label:" $label 
    echo "type:" $type 
    echo 
done 

編集:これはあなたのために働くかもしれないペレルマン

#!/bin/sh 
sed -n 's|^<label>\(.*\)</label><type>\(.*\)</type>.*$|\1\n\2|p' | while read label; do 
    read type 
    echo "label:" $label 
    echo "type:" $type 
    echo 
done 
+0

提供されたソリューションは素晴らしいですが、3番目の変数を追加しようとしましたが、うまくいかないようです – user1205654

0

によってコメントに触発された別のバージョン:

sed 's/<\([^>]*\)>\([^<]*\)<\/\1>/&\n/g' file | 
sed '/^\s*$/d;s/<\([^>]*\)>\([^<]*\)<\/\1>/\1="\2"/' 
label="blogname" 
type="string" 
label="blog description" 
type="text" 
関連する問題