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

使用perl就地删除文件中已找到的行块,perl,Perl,我希望能够找到一个由开始和结束关键字确定的文件中的行块,然后删除该块。我正在使用if/START//END/定位此块,但不确定如何删除此块中的行。我可以在上面的“如果”中使用什么语句来实现这一点 注意:它不一定是真的。我的意思是,它可以简单地用空的空间替换行 PS:我是第一次使用perl,如果这是一个愚蠢的问题,请原谅。我知道有许多类似的问题,但似乎没有人处理就地删除,并建议将整个文件打印到另一个文件(不包括所需的块)之类的选项。您可以颠倒逻辑: use warnings; use strict

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

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


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

您可以颠倒逻辑:

use warnings;
use strict;

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

=for output

foo
bar

=cut


__DATA__
foo
START
goo
END
bar

你可以颠倒你的逻辑:

use warnings;
use strict;

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

=for output

foo
bar

=cut


__DATA__
foo
START
goo
END
bar

Perl使这变得非常简单

一行,在位删除模式1和模式2之间的行:


请参阅以了解perl的各种命令行开关。perl使这变得非常容易

一行,在位删除模式1和模式2之间的行:

请参阅以了解perl使用sed的各种命令行开关:

sed '/START/,/END/d' input_file
要修改原始文件,请执行以下操作:

sed -i '/START/,/END/d' input_file
对于sed:

sed '/START/,/END/d' input_file
要修改原始文件,请执行以下操作:

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

简单地收集不在/START/内的所有行如何/END/block,然后将它们写入一个文件?我可以这样做,但是否有一个就地解决方案的可能性?简单地收集不在/START/内的所有行如何/结束/阻塞,然后将其写入文件?我可以这样做,但是否有可能实现就地解决方案?要做到这一点,我需要以读+写模式打开文件吗?它会打印同一文件中的所有行吗?要执行此操作,我需要以读写模式打开文件吗?它会在同一个文件中打印所有行吗?