2015-06-02 39 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