使用perl就地删除已在文件中找到的行块

时间:2012-08-23 19:33:38

标签: perl

我希望能够在由开始和结束关键字确定的文件中找到一个行块,然后删除该块。我正在使用“if(/START/../END/)”来查找此块,但我不确定如何删除此块中的行。我可以在上面的'if'中使用什么声明来实现这个目标?

注意:它不一定是真正的删除。我的意思是,它可以简单地用空格替换线。

PS:我是第一个perl用户,如果这似乎是一个愚蠢的问题,请原谅我。我知道有很多类似的问题,但没有人似乎在处理就地删除和建议选项,如打印整个文件到另一个文件,不包括所需的块。

3 个答案:

答案 0 :(得分:4)

Perl让这很容易。

一行,删除pattern1pattern2之间的行:

perl -i -ne 'print unless /pattern1/../pattern2/' input_file

请参阅perlrun以了解perl的各种命令行开关

答案 1 :(得分:2)

你可以颠倒你的逻辑:

use warnings;
use strict;

while (<DATA>) {
    print unless /START/ .. /END/;
}

=for output

foo
bar

=cut


__DATA__
foo
START
goo
END
bar

答案 2 :(得分:1)

使用sed:

sed '/START/,/END/d' input_file

修改原始文件:

sed -i '/START/,/END/d' input_file