使用Sed进行多行替换

使用Sed进行多行替换,sed,Sed,我有这样一个文件: function a() { doSomething(); doSomethingElse(); } 现在我需要将函数a(){和}之间的所有文本替换为其他文本 我尝试了几种在这里找到的方法,但都失败了。我希望我能得到解释和答案 另外,技巧需要与OS X和GNU-Sed兼容。您可以进行标准替换: sed -i 's/\(\<\)doSomething()/\1somethingElse()/' your_file -i标志表示:内联替换 我使用了以下示例文件

我有这样一个文件:

function a() {
  doSomething();
  doSomethingElse();
}
现在我需要将
函数a(){
}
之间的所有文本替换为其他文本

我尝试了几种在这里找到的方法,但都失败了。我希望我能得到解释和答案


另外,技巧需要与OS X和GNU-Sed兼容。

您可以进行标准替换:

sed -i 's/\(\<\)doSomething()/\1somethingElse()/' your_file
-i
标志表示:内联替换


我使用了以下示例文件:

function a() {
  doSomething();
doSomething();
  foo();doSomething();
}
输出:

function a() {
  somethingElse();
somethingElse();
  foo();somethingElse();
}
  • 将函数a()段落中的
    doSomething
    行替换为其他行
  • 高度依赖于函数a()的内容(假设函数中没有结尾
    }
    行)

doSomething()当前只有一行?向我们展示您的尝试、结果和预期结果对于涉及同时在多行上操作的任何作业来说,sed始终是错误的工具。如果
sed的/doSomething()/foobar/”文件不是您所需要的全部,那么请编辑您的问题,以澄清您的要求,并提供更好的示例输入和预期输出。@EtanReisner否,多行符合Ed Morton的评论请注意,到目前为止,您收到的每个答案都只处理了一行(以及该行)输入的数量?这就是为什么在提出这类问题时,给出准确的现实生活输入是至关重要的。正如Ed所说,
sed
对于这个工作来说是错误的工具。
c\
(带反斜杠)符合posix标准,
c
仅用于GNU。如果失败,您仍然可以使用临时文件和
r
操作。
function a() {
  doSomething();
doSomething();
  foo();doSomething();
}
function a() {
  somethingElse();
somethingElse();
  foo();somethingElse();
}
sed '/^function a() {/,/}/{
   /^[[:blank:]]*doSomething();/ c\
Replace with\
whaterver you want \
where new line are backslash \
at the end for multiline.
   }' YourFile