2012-02-12 150 views
1

我有一個名爲test的文件,其中包含線的未知數量:bash腳本讀取一個文本文件,然後輸出每行到變量

<label>blogname</label><type>string</type> 
<label>blog description</label><type>text</type> 

我想用SED或AWK讀取該文件並將每個標籤和每個類型存儲到一個單獨的變量中,或者更好地存儲到數組中。

將輸出標籤的內容在文件中這個例子:

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

但我需要每一行的內容,並通過每個標籤的內容分開他們給我這樣的:

label="blogname" 
type="string" 

我然後需要用腳本處理數組。

我一直在尋找一個解決方案,這幾個小時,但沒有運氣。

+0

你也許可以寫一個'awk'腳本輸出與線該標籤後跟一個帶有類型的行,並在bash的'while'循環中使用'read'將值放入數組中。查閱'read'和bash數組。 – perelman 2012-02-12 21:22:05

回答

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

提供的解決方案是偉大的,但我試圖添加第三個變量,但它似乎並沒有工作 – user1205654 2012-02-12 23:26:38

0

這可能會爲你工作:

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