如何在<>之间grep文本和数字括号

时间:2013-03-11 14:18:07

标签: regex perl grep

我是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: $!";
    }

由于

1 个答案:

答案 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>'
        ];