我将文本文件拆分为块,以便使用正则表达式提取那些不包含特定行的块。文本文件如下所示:
[Term]
id: id1
name: name1
xref: type1:aab
xref: type2:cdc
[Term]
id: id2
name: name2
xref: type1:aba
xref: type3:fee
几天前有人帮助我,向我展示了如何提取那些包含某个正则表达式的块(例如“xref:type3”):
while (<MYFILE>) {
BEGIN { $/ = q|| }
my @lines = split /\n/;
for my $line ( @lines ) {
if ( $line =~ m/xref:\s*type3/ ) {
printf NEWFILE qq|%s|, $_;
last;
}
}
}
现在我想将所有块写入一个不包含“xref:type3”的新文件中。我试图通过简单地否定正则表达式来做到这一点
if ( $line !~ m/xref:\s*type3/ )
或者通过使用来否定 if 语句
unless ( $line =~ m/xref:\s*type3/ )
不幸的是,它不起作用 - 输出文件与原始文件相同。任何想法我做错了什么?