2013-03-03 98 views
4

這個例子來自devstack腳本。如何使用sed替換ini文件中的值?

sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" "$file" 

任何人都可以解釋這sed取代命令如何工作?

我瞭解一些基本的sed機制,但這對我來說似乎很複雜。

+0

但不是分組和/或替換錯! 'key = oldValue'將被替換爲'key = oldValueNewValue' – mefiX 2014-01-15 09:23:10

回答

2

-i選項就地編輯文件$文件。

地址範圍

爲一系列行匹配的語法/型式1 /,/ PATTERN2/ 該腳本用於從含有在$部分的字符的開始處的第一行的行的範圍搜索該行(注意使用插入符)指向^ [。*],表示至少包含一個字符的行。

換人

對於符合上述範圍指定其所有行中,進行替換命令S /圖案/更換/命令。 請注意使用|劃分替代命令 - s | pattern | replacement |。

匹配的模式使用插入符號(^)從行首開始。

部分(....)位於替換部分,稱爲\ 1。

在(...)部分是字符串$部分,後面可能還有一些空格或製表符 - [\ t] *表示沒有或多個製表符或空格。後面跟着一個'='字符,可能有更多空格或製表符。 。* $將匹配任意數量的字符到行尾。

替換\ 1 $值是前面提到的包含(...)的部分,後面是$ value中的值。

HTH!