2012-06-07 72 views
0

替代模式我有一個像搜索和多線

Fixed pattern 
text which can change(world) 

的模式我想

Fixed pattern 
text which can change(hello world) 

我想使用

cat myfile | sed -e "s#\(Fixed Pattern$A_Z_a_z*\(\)#\1 hello#g > newfile 

更新替換此: 上面的單詞世界也是一個變量,會改變 基本上添加hello af在表達式後遇到的第一個括號。

在此先感謝。

+0

在「固定模式」之後,是否在線上每個開口括號內添加「hello」? –

回答

3

假設你的目標是'Fixed pattern'上線後加'hello '無孔不入的括號內,這裏是應該工作的解決方案:

sed -e '/^Fixed pattern$/!b' -e 'n' -e 's/(/(hello /' myfile 

下面是每個部分的解釋:

/^Fixed pattern$/!b # skip all of the following commands if 'Fixed pattern' 
         # doesn't match 
n      # if 'Fixed pattern' did match, read the next line 
s/(/(hello/   # replace '(' with '(hello ' 
+0

謝謝你的作品! – PravinCG

+0

@PravinCG - 沒問題,我只是編輯它來刪除替換後的'g',因爲你的編輯表明你只想在第一個'(')上執行替換。 –

2

要使用SED爲此,使用n

sed '/Fixed pattern/{n; s/world/hello world/}' myfile 

您可能需要更加小心,但這應該在大多數情況下工作。每當sed看到Fixed pattern(您可能想要使用線路錨點^$),它將讀取下一行,然後將替換應用到它。

+0

更新了問題,世界也是一個變量 – PravinCG

+0

感謝您的回答,+1。 – PravinCG