請問如何刪除指定區塊?

謝謝Lonki的解說,我的修改如下...........

open(FD, "/tmp/info.log") || die "$!\n";
open(NEW,">/tmp/info.log");
while (<FD>) {
      undef $/;s/.*{[^}]*NAME=CCC[^}]*}//g;
      print NEW $_;
}
close NEW;


QUOTE:
perl -ne '$/="";print unless /NAME=CCC/;'

大多数情况下, 这是个非常好的办法, 但....

如果相邻区域没有空行分割, 就会去掉多余的数据, 如:
A {
   NAME=CCC
}
B {
   NAME=BBB
}


QUOTE:
原帖由 Lonki 于 2007-12-18 13:39 发表


大多数情况下, 这是个非常好的办法, 但....

如果相邻区域没有空行分割, 就会去掉多余的数据, 如:
A {
   NAME=CCC
}
B {
   NAME=BBB
}

谢谢指点!
稍做修改:
perl -ne '$/="}";print unless /NAME=CCC/;'



QUOTE:
原帖由 inmolee 于 2007-12-18 13:38 发表
謝謝Lonki的解說,我的修改如下...........

open(FD, "/tmp/info.log") || die "$!\n";
open(NEW,">/tmp/info.log");
while () {
      undef $/;s/.*{[^}]*NAME=CCC[^}]*}//g;
      print NEW $_;
}
...

有点汗……

[Copy to clipboard] [ - ]
CODE:
open(FD, "/tmp/info.log") || die "$!\n";
open(NEW,">/tmp/info.log");
undef $/;
$_=<FD>;
s/.*{[^}]*NAME=CCC[^}]*}//g;
print NEW;
close FD;  close NEW;

这样就行了
$/已经undef了,就不存在多少行了
直接
perl -ne 'print unless /NAME=CCC/;' urfile