2013-04-29 64 views
0

我從來沒有使用sed除了幾小時試圖解決這個問題。我有一個配置文件與參數,如:如何使用sed解析配置文件

test.us.param=value 
test.eu.param=value 
prod.us.param=value 
prod.eu.param=value 

我需要解析這些輸出這一點,如果REGIONID是美國:

test.param=value 
prod.param=value 

如何做到這一點(與sed或其他方式)的任何幫助將很棒。

+0

您能澄清一下REGIONID是或指的是什麼? – UpAndAdam 2013-04-29 16:00:43

+0

腳本中的變量 – Michael 2013-04-29 16:08:57

+0

因此,數據的格式有點像ENVIRONMENT.REGIONID.param = value,儘管區域ID可能需要根據大小寫進行更改。 只是試圖清楚你爲什麼選擇你選擇的行。我認爲我們都推測了所有這些,但這會提高問題的清晰度。 – UpAndAdam 2013-04-29 16:36:15

回答

3

這個工作對我來說:

sed -n 's/\.us\././p' 

即如果 「頁面沒有自動跳轉。」可以用點替換,打印結果。

+0

很酷。我怎樣才能用結果替換文件中的原始四行而不是僅僅打印它們? – Michael 2013-04-29 15:02:29

+1

@Michael:要更改文件,使用'sed -i〜'(如果支持)。 – choroba 2013-04-29 15:07:17

+0

你是最好的 – Michael 2013-04-29 15:08:34

0

如果有數百行和數百行,首先搜索包含.us的行可能會更高效。然後做字符串替換... AWK是另一個不錯的選擇或grep grep into sed

cat INPUT_FILE | grep "\.us\." | sed 's/\.us\./\./g' 

當然如果'.us。'可以在此值不是就足夠了。

你也可以做與地址語法(從技術上講,你可以嵌入第二sed的到的第一個語句如干脆不記得語法)

sed -n '/\(prod\|test\).us.[^=]*=/p' FILE | sed 's/\.us\./\./g' 

我們或許應該做一些清潔劑。如果格式總是爲environment.region.param,我們可以看一下強制這隻發生在等號前面的文本上。

sed -n 's/^\([^,]*\)\.us\.\([^=]\)=/\1.\2=/g' 

這隻適用於以任意數量的字符開頭,後跟'。'的行。然後'我們',然後''。然後在'='符號之前有任何數字。這樣我們就不會修改'.us'。如果在「值」中找到