我是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行:)
答案 0 :(得分:0)
使用范围运算符:
perl -pe 's/^/#/ if /word1\s*\{/ .. /\}\s*word2/'
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '/word1/,/word2/s/^/#/' file