用Sed替换多行

时间:2015-06-02 16:58:14

标签: sed

我有一个这样的文件:

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

现在,我需要将function a() {}之间的所有文字替换为其他文字

我尝试了几种方法,但都失败了。我希望我能得到解释以及答案。

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

2 个答案:

答案 0 :(得分:0)

您可以进行标准替换:

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

我们使用单词boundary来分隔你的字符串:

\(\<\)doSomething()

然后我们用你的新字符串(包括捕获的字边界)替换该字符串:

\1somethingElse()

-i标志代表:内联替换

我使用了这个示例文件:

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

输出:

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

答案 1 :(得分:0)

sed '/^function a() {/,/}/{
   /^[[:blank:]]*doSomething();/ c\
Replace with\
whaterver you want \
where new line are backslash \
at the end for multiline.
   }' YourFile
  • 将函数a()段落中的doSomething行替换为其他行
  • 高度依赖于函数a()的内容(假设函数内部没有结尾}