如何删除部分字符串以保留我想要的信息?

时间:2011-03-25 14:36:15

标签: regex perl

我的文本文件中出现了一个字符串。我试图隔离它的某个部分。

字符串是

!Image: Software: C3750-ADVIPSERVICESK9-M, 12.2(25)SED, RELEASE SOFTWARE (fc1)

我需要抓住C3750-ADVIPSERVICESK9-M, 12.2(25)SED部分,但问题是该部分会根据正在读取的文件而改变。所以我猜我需要一个反向正则表达式(??),它只选择不匹配的文本。以下是我到目前为止:

#!/usr/bin/perl -w
use warnings;
$fulldir = "/location/";
opendir(DIR, $fulldir);
my @files = grep {$_ ne '.' && $_ ne '..'} readdir DIR;
closedir(DIR);
foreach my $configs (@files) {
    open FH, "$fulldir/$configs" or die $!;
    while (<FH>) {
        if ($_ =~ m/!Image: Software:.*/) {
            my $text = $_;
            $text = Regex goes here i think : D
            print "$configs is running $text\n";
        }
    }
}

2 个答案:

答案 0 :(得分:2)

尝试用这个替换你的while循环:

while (<FH>) {
   if (($text) = (/\!Image: Software: (.+), RELEASE SOFTWARE/)) {
      print "$configs is running $text\n";
   }
}

答案 1 :(得分:0)

所有行都以',RELEASE SOFTWARE'结束吗?在这种情况下,您可以使用以下正则表达式:

m/^(.+), RELEASE SOFTWARE/

您想要的部分将是1美元。