简体   繁体   English

sed — Multine,花括号,搜索替换

[英]sed — Multine, curlybrackets, search replace

If want to replace all: 如果要全部替换:

if (err) {
    callback(err);
    return;
}

With: 带有:

if (err) return callback(err);

In my code. 在我的代码中。

Using sed, I was looking for something like: 使用sed,我正在寻找类似的东西:

sed -n '1h;1!H;${;g;s/if\s*\(err\)\s*{\s*callback\(err\);\s*return;\s*}/if \(err\) return callback\(err\);/g;p;}'

As described here: http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/ 如此处所述: http : //austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/

But it doesn't seems to work. 但这似乎不起作用。 Any idea? 任何想法?

I agree with other posters that there are better alternatives for sed , but in case you are curious: the fault was in the parentheses. 我同意其他张贴者的观点,认为sed有更好的替代方法,但是如果您好奇的话,错是在括号中。 These should not be escaped with a backslash, as this causes them to be handled as grouping symbols, rather than literal parentheses. 这些字符不应使用反斜杠进行转义,因为这会使它们被视为分组符号,而不是文字括号。

This works fine: 这工作正常:

sed -n '1h;1!H;${;g;s/if\s*(err)\s*{\s*callback(err);\s*return;\s*}/if (err) return callback(err);/g;p;}'

Through Perl, 通过Perl,

$ cat file
foo
if (err) {
    callback(err);
    return;
}
bar
$ perl -0pe 's/(if *(\(err\))) *{\s*(callback)\2;\s*(return);\s*}/$1 $4 $3$2;/g' file
foo
if (err) return callback(err);
bar

使用perl,我能够做到:

perl -i -p0e 's/if \(err\) \{\n\s*callback\(err\)\;\n\s*return;\s*}/if \(err\) return callback\(err\)\;/smg' my_file

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM