2013-08-24 35 views
1

我有以下的配置文件:使用sed或awk追加重複的文本?

servers = (
    { 
    host = "localhost"; 
    ... 
    timeout = 5; 
    }, 
    { 
    host = "127.0.0.1"; 
    ... 
    timeout = 0; 
    }, 
    { 
    host = "example.com"; 
    ... 
    timeout = 99; 
    } 
); 

我想追加「指數」在每節的末尾設置這樣的配置是這樣的:

servers = (
    { 
    host = "localhost"; 
    ... 
    timeout = 5; 
    index = 1; 
    }, 
    { 
    host = "127.0.0.1"; 
    ... 
    timeout = 0; 
    index = 2; 
    }, 
    { 
    host = "example.com"; 
    ... 
    timeout = 99; 
    index = 3; 
    } 
); 

我怎樣才能做到這一點與傳統的Unix工具如sedawk

回答

4

在每條以timeout作爲第一個單詞的每一行之後,會添加一行index = ...

awk '1;$1=="timeout"{printf " index = %d;\n", ++i}' file 
+0

Thanx,這是我期望的更簡單!我也嘗試使用正則表達式而不是平等來使其更加魯莽。這個正則表達式「$ 1〜/^\ s * timeout \ s * /」工作正常。但是這個正則表達式「$ 1〜/^\ s * timeout \ s * \ = \ s * \ d + \ s *; /」與字符串不匹配。你有好主意嗎? –

+0

@VitalyP'$ 1'匹配第一個單詞。如果你想要整行,你應該使用'$ 0',所以表達式可以是'$ 0〜/^[\ t] * timeout [\ t] * = [\ t] * [0-9] * [\ t ] *; [\ t] * $'。 Awk默認匹配整行,所以你可以寫成awk'1;/^ [\ t] * timeout [\ t] * = [\ t] * [0-9] * [\ t] * ; [\ t] * $/{printf「index =%d; \ n」,++ i}'file' – user000001