2015-11-06 104 views
0

我需要編輯特定塊中的param值。你能幫助在這個sed命令。我知道有一個perl腳本來做到這一點,但我需要在一個命令sed命令用於搜索多個字符串並替換其中一個字符串

我的文件看起來像這樣

Block 1 
    Param1=val1 
    Param2=val2 
    . 
    . 

Block 2 
    Param1=val1 
    Param2=val2 
    . 
    . 

Block 3 
. 
. 
. 
+0

您期望的輸出是什麼? – Kalanidhi

+0

替換參數值,如Param1 = modifiedval1 – cms

回答

1

您可以用sed的地址:/pattern1/,/pattern2/只能處理一個「塊」。例如,如果你只是想在Block 1改變Param1

sed -r '/^Block 1/,/^Block 2/s/(\s*Param1=).*/\1NEW/' file 

如果你有很多塊,你可以使用^Block 1$^Block 1\s*$。這不會例如獲取混亂:Block 120

+0

Kent,我只需要在其中一個塊中修改參數值。我試過這個sed -r'/^Block 1/s /(\ s * Param1 =。*)/ \ 1Param1 = newvalue /'文件。它沒有編輯。我錯過了什麼 – cms

+0

@cms我的cmd會輸出結果(param1改變了)。如果你想改變文件,可以在你的gnu sed中添加'-i'選項。 – Kent

0

這可能會爲你工作(GNU SED):

sed -ri '/^Block/h;G;s/(Param1=)\S+(.*\nBlock 2)$/\1newval\2/;P;d' file 

商店當前塊的保留空間和塊變量追加到的每行文件。如果參數和塊變量匹配,則替換新的參數值。打印每一行並刪除塊變量。

N.B.上面的解決方案將替換塊2中的參數1,根據您的需求量身定製解決方案。

相關問題