我希望能够在由 start 和 end 关键字确定的文件中找到一行行,然后删除该块。我正在使用“if (/START/../END/)”来定位此块,但不确定如何删除此块中的行。我可以在上面的“if”中使用什么语句来实现这一点?
注意:它不一定是真正的删除。我的意思是,它可以简单地用空白替换行。
PS:我是第一次使用 perl,如果这似乎是一个愚蠢的问题,请原谅我。我知道那里有很多类似的问题,但似乎没有人处理就地删除并建议选项,例如将整个文件打印到另一个文件,不包括所需的块。
我希望能够在由 start 和 end 关键字确定的文件中找到一行行,然后删除该块。我正在使用“if (/START/../END/)”来定位此块,但不确定如何删除此块中的行。我可以在上面的“if”中使用什么语句来实现这一点?
注意:它不一定是真正的删除。我的意思是,它可以简单地用空白替换行。
PS:我是第一次使用 perl,如果这似乎是一个愚蠢的问题,请原谅我。我知道那里有很多类似的问题,但似乎没有人处理就地删除并建议选项,例如将整个文件打印到另一个文件,不包括所需的块。
Perl 使这很容易。
一行,就地删除 和 之间的pattern1
行pattern2
:
perl -i -ne 'print unless /pattern1/../pattern2/' input_file
查看perlrun
了解 perl 的各种命令行开关
你可以颠倒你的逻辑:
use warnings;
use strict;
while (<DATA>) {
print unless /START/ .. /END/;
}
=for output
foo
bar
=cut
__DATA__
foo
START
goo
END
bar
使用 sed:
sed '/START/,/END/d' input_file
修改原始文件:
sed -i '/START/,/END/d' input_file