我希望能够在由开始和结束关键字确定的文件中找到一个行块,然后删除该块。我正在使用“if(/START/../END/)”来查找此块,但我不确定如何删除此块中的行。我可以在上面的'if'中使用什么声明来实现这个目标?
注意:它不一定是真正的删除。我的意思是,它可以简单地用空格替换线。
PS:我是第一个perl用户,如果这似乎是一个愚蠢的问题,请原谅我。我知道有很多类似的问题,但没有人似乎在处理就地删除和建议选项,如打印整个文件到另一个文件,不包括所需的块。答案 0 :(得分:4)
Perl让这很容易。
一行,删除pattern1
和pattern2
之间的行:
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