1

我希望能够在由 start 和 end 关键字确定的文件中找到一行行,然后删除该块。我正在使用“if (/START/../END/)”来定位此块,但不确定如何删除此块中的行。我可以在上面的“if”中使用什么语句来实现这一点?

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

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

4

3 回答 3

4

Perl 使这很容易。

一行,就地删除 和 之间的pattern1pattern2

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

查看perlrun了解 perl 的各种命令行开关

于 2012-08-23T19:40:45.317 回答
2

你可以颠倒你的逻辑:

use warnings;
use strict;

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

=for output

foo
bar

=cut


__DATA__
foo
START
goo
END
bar
于 2012-08-23T19:39:24.633 回答
1

使用 sed:

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

修改原始文件:

sed -i '/START/,/END/d' input_file
于 2012-08-23T19:41:25.253 回答