1
我需要从两个标记点之间的文件中剪切一组行。例如,文件是使用Perl从两个标记点之间的文件中删除文本块
file.txt的
END
line 1 not removed
END
line 2 not removed
line 3 not removed
BEGIN
line 1 is to be removed
line 2 is to be removed
line 3 is to be removed
END
line two last not removed
END
line three last not removed
line four last not removed
我想删除BEGIN
和END
之间的界线。新的文件将成为
FILE2.TXT
END
line 1 not removed
END
line 2 not removed
line 3 not removed
line two last not removed
END
line three last not removed
line four last not removed
这意味着BEGIN
和BEGIN
后的第一END
和它们之间的连线应该被删除。
我能写这个程序,它完美的作品。但是有没有更好的方法来做到这一点?
use File::Copy;
$j = $i = 0;
open(DATA, "<file1.txt");
open(DATA1, ">file2.txt");
while (<DATA>) {
if ($_ =~ /^BEGIN/) { $i = 1; }
if ($_ =~ /^END/ && $i == 1) { $i = 0; next if $_ }
if ($i == 1) { next if $_; }
print DATA1 $_;
}
close(DATA);
close(DATA1);
copy "file2.txt", "file1.txt";
哇!这很好。我不知道范围操作员。 – Nijin
除了它提供了所需的结果之外,推荐一个Perl咒语是无可非议的。我认为从文档摘录中可以清楚地看出,范围运算符'''和'...'的确切功能有点神秘。如果任何人能够简洁直观地解释是否打印出'BEGIN'行或'END'行,以及'..'和'...'之间的区别是什么,那么请添加这个智慧。 – Borodin
@mpapec:您的修订没有任何可见的变化,因此我已经将其回滚 – Borodin