簡體   English   中英

sed — Multine,花括號,搜索替換

[英]sed — Multine, curlybrackets, search replace

如果要全部替換:

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/

但這似乎不起作用。 任何想法?

我同意其他張貼者的觀點,認為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;}'

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