使用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