sed - 多行,花括号,搜索替换

时间:2014-11-20 11:15:43

标签: regex sed

如果想要全部替换:

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

使用:

if (err) return callback(err);

在我的代码中。

使用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;}'

如下所述:http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/

但它似乎不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我同意其他海报,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;}'

答案 1 :(得分:0)

通过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

答案 2 :(得分:0)

使用perl我能够做到:

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