Perl:多行匹配+为所有匹配的行添加前缀

时间:2015-12-10 08:17:39

标签: regex perl sed multiline prefix

我是Perl的初学者。我通常使用" sed"对于模式替换,但由于我需要在一个巨大的文件中注释掉一些多行部分,我想到使用Perl在多行搜索中更强大。

模式样本:

#word1 {
#    do not care1
#    do not care2
#    ...
#} word2

预期输出:

perl -0777 -pe 's/(word1\s*{[^}]*\s*}\s*word2\s.*)/#$1/gm' 

我发现非常有用的Q& As on perl multiline matching,但是我找不到任何好的/紧凑/简单的解决方案来为所有匹配的行(不仅仅是第一行)添加前缀。

目前,这是我写的代码:

#word1 {
    do not care1
    do not care2
    ...
} word2

但不幸的是,它无法在所有匹配的行中添加前缀(#),如下所示:

{{1}}
你能帮忙吗?我希望代码仍然是1行:)

2 个答案:

答案 0 :(得分:0)

使用范围运算符:

perl -pe 's/^/#/ if /word1\s*\{/ .. /\}\s*word2/'

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed '/word1/,/word2/s/^/#/' file