2015-06-02 41 views
-1

我有一個這樣的文件:多線替換桑達

function a() { 
    doSomething(); 
    doSomethingElse(); 
} 

現在我需要一些其他的文本

我想在這裏找到一些方法來代替function a() {}之間的所有文字,但他們全部失敗。我希望我能得到解釋以及答案。

P.S.技巧需要兼容OS X和GNU Sed。

+0

是'DoSomething的();'目前單行? –

+0

向我們展示您的嘗試,結果和預期結果 – randomusername

+3

對於涉及同時在多條生產線上操作的任何作業,sed始終是錯誤的工具。如果您不需要'sed's/doSomething()/ foobar /'file',那麼編輯您的問題以闡明您的要求並提供更好的樣本輸入和預期輸出。 –

回答

0

你可以做一個標準的替換:

sed -i 's/\(\<\)doSomething()/\1somethingElse()/' your_file 

我們用這個詞邊界劃定你的字符串:

\(\<\)doSomething() 

然後我們更換新的字符串,字符串(包括攝字邊界):

\1somethingElse() 

The -i flag代表:inline更換


我用此示例文件:

function a() { 
    doSomething(); 
doSomething(); 
    foo();doSomething(); 
} 

輸出:

function a() { 
    somethingElse(); 
somethingElse(); 
    foo();somethingElse(); 
} 
0
sed '/^function a() {/,/}/{ 
    /^[[:blank:]]*doSomething();/ c\ 
Replace with\ 
whaterver you want \ 
where new line are backslash \ 
at the end for multiline. 
    }' YourFile 
  • 通過一些其它線替換的doSomething內部函數a()段落中的行(s)
  • 高度依賴於功能的內容()(假設沒有結束}功能)
+0

謝謝,但'c \'部分只在GNU Sed中有效。 – fish748

+0

'c \'(帶反斜槓)符合POSIX標準,'c'只能用於GNU sed。如果失敗,您仍然可以使用臨時文件和「r」動作。 – NeronLeVelu