Как удалить части строк, чтобы оставить нужную информацию? - PullRequest
0 голосов
/ 25 марта 2011

У меня есть строка, которая появляется в моих текстовых файлах. Я пытаюсь выделить определенную часть этого.

Строка

!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 ]

2 голосов
/ 25 марта 2011

Попробуйте заменить цикл while следующим:

while (<FH>) {
   if (($text) = (/\!Image: Software: (.+), RELEASE SOFTWARE/)) {
      print "$configs is running $text\n";
   }
}
0 голосов
/ 25 марта 2011

Все ли строки заканчиваются на ', RELEASE SOFTWARE'?В этом случае вы можете использовать следующее регулярное выражение:

m/^(.+), RELEASE SOFTWARE/

Часть, которую вы хотите, будет в $ 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...