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