我有一个这样的文件:多线替换桑达
function a() {
doSomething();
doSomethingElse();
}
现在我需要一些其他的文本
我想在这里找到一些方法来代替function a() {
和}
之间的所有文字,但他们全部失败。我希望我能得到解释以及答案。
P.S.技巧需要兼容OS X和GNU Sed。
我有一个这样的文件:多线替换桑达
function a() {
doSomething();
doSomethingElse();
}
现在我需要一些其他的文本
我想在这里找到一些方法来代替function a() {
和}
之间的所有文字,但他们全部失败。我希望我能得到解释以及答案。
P.S.技巧需要兼容OS X和GNU Sed。
你可以做一个标准的替换:
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();
}
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)}
线内功能)谢谢,但'c \'部分只在GNU Sed中有效。 – fish748
'c \'(带反斜杠)符合POSIX标准,'c'只能用于GNU sed。如果失败,您仍然可以使用临时文件和“r”动作。 – NeronLeVelu
是'DoSomething的();'目前单行? –
向我们展示您的尝试,结果和预期结果 – randomusername
对于涉及同时在多条生产线上操作的任何作业,sed始终是错误的工具。如果您不需要'sed's/doSomething()/ foobar /'file',那么编辑您的问题以阐明您的要求并提供更好的样本输入和预期输出。 –