我是Perl的新手,想知道你是否可以帮我查询一下。
我正试图在<>之间插入一个确切的文本和数字序列。文本文件中的括号。
以下是代码:
open (FILE1, "file.txt") or die ("Error: File cannot be found");
@file1 = <FILE1>;
@file2 = join(' ', @file1);
my @grabJustTheHVSection = grep { $_ =~ /\<HV\>.*\<\\HV\>/s} @file2;
close(FILE);
我希望数组@grabJustTheHVSection只包含file1.txt中的以下内容:
00000000 00000010 00000100 00001000 00000000 00100000
00000000 00000010 00000100 00001000 00000000 00100000
&LT; \&HV GT;
更多示例代码:
@file2 = join('', @file1);
my @replace = grep { $_ =~ /\<HV>/g } @file2;
foreach $_ (@replace){
if($_ !~ m/.PDT>/g){
s /<HV>/<PDT>/g;
s /<\\HV>/<\\PDT>/g;
(print NEW $_) or die "Cant write to $new: $!";
}
由于
答案 0 :(得分:0)
如果这是某种标记语言,您应该使用解析器。 <\HV>
中的“逆转”反斜杠似乎表明了别的东西,但也许这是一个错字?
无论如何,您可以使用flip-flop operator。要点是在触发器返回true的条件之间,否则为false。
use strict;
use warnings;
use Data::Dumper;
chomp(my @file = <DATA>);
my @HV = grep /<HV>/ .. /<\\HV>/, @file;
print Dumper \@HV;
__DATA__
foo
<HV>
00000000 00000010 00000100 00001000 00000000 00100000
00000000 00000010 00000100 00001000 00000000 00100000
<\HV>
bar
<强>输出:强>
$VAR1 = [
'<HV>',
'00000000 00000010 00000100 00001000 00000000 00100000',
'00000000 00000010 00000100 00001000 00000000 00100000',
'<\\HV>'
];