Iam尝试删除测试段经常发生在文件中。我有一个匹配的关键字let suppose
FIND_WORD(---------
-----------
-----------);
在“);
”的2行或3行后终止,但我需要删除下几行,直到“);
”
我正在使用
if ($line =~ m/FIND_WORD/) {return 0;}
删除一行
我需要删除“);
”
答案 0 :(得分:2)
听起来这正是触发器操作员的用途。
while (<>) {
print unless /FIND_WORD\(/ .. /\);/;
}
来自perlop:
在标量上下文中,&#34; ..&#34;返回一个布尔值。运营商是 双稳态,如触发器,并模拟行范围(逗号) sed,awk和各种编辑的运营商。每个&#34; ..&#34;操作者 即使在调用子例程时,它也会保持自己的布尔状态 包含它。只要其左操作数为假,它就是假的。 一旦左操作数为真,范围运算符将保持为真,直到 右操作数为true,范围运算符变为false 试。
有关详细信息,请参阅this recent GeekUni blog post。
答案 1 :(得分:1)
您需要使用多行匹配。您需要将整个文件粘贴到变量中,然后替换它。
$all_lines =~ s/FIND_WORD.*?\)\;//sg;
这从FIND_WORD匹配到最近的“);”并删除它。