2015-03-12 2 views
0

У меня есть текстовый файл, считанный как массив. Я проверяю каждую строку этого массива и пытаюсь извлечь часть строки в скрипте Perl, если она соответствует шаблону.regex to pull часть строки

---                  
    Message '/com/java/deploy/mess1' on folder1 'f1' is running.        

    Additional thread instances: '0'           
    Deployed: '11/12/13 1:54 AM' in Jar file '/deploy/ENV/folder1/mess1ENV11122013.jar' 
    Last edited: '5/24/13 4:38 PM'.           
    Long description: ''              

    ---                  
    Message '/com/java/deploy/mess2' on folder1 'f1' is running.        

    Additional thread instances: '0'           
    Deployed: '11/12/13 1:54 AM' in Jar file '/deploy/ENV/folder1/mess2ENV11122013.jar' 
    Last edited: '5/24/13 4:38 PM'.           
    Long description: ''              
    ----                  
    Message '/com/java/deploy/mess3' on folder1 'f1' is running.        

    Additional thread instances: '0'           
    Deployed: '11/12/13 1:54 AM' in Jar file '/deploy/ENV/folder1/mess3ENV11122013.jar' 
    Last edited: '5/24/13 4:38 PM'.           
    Long description: '' 

Я ищу mess1 и пытаюсь извлечь информацию о банке из вышеуказанного массива.

foreach $line (@messdetials) { 

    if ($line =~ mess1) { 
    next if /^(\s)*$/; 

    if (/in Jar file '(.*?)'/) { 
     @jardetails = `$displaycommand -b $1`; 
     print @jardetails; 
    } 

Я надеюсь извлечь /deploy/ENV/folder1/mess1.jar FRON массива и запустить скрипт Inhouse против него, но я не вижу выхода.

+0

Итак, каждая строка выше - это один элемент в вашем массиве или каждый блок - это один элемент? (блоки разделяются -) –

+0

Если 'if ($ line = ~ mess1) {' be 'if ($ line = ~/mess1 /) {'? Заметьте, я добавил косые черты. – bloodyKnuckles

+0

@bloodyKnuckles: Это то же самое. Он не жалуется, потому что OP явно не использует 'use strict' и' use warnings' – Borodin

ответ

0

Это будет делать то, о чем вы просите. Он ожидает, что путь к файлу inpu в качестве параметра в командной строке, как этот

perl findjar.pl /path/to/mylog.log 

findjar.pl

use strict; 
use warnings; 

my $mess; 
while (<>) { 
    if (/^\s*Message\s*'([^']*)'/) { 
    $mess = $1; 
    } 
    elsif (/in Jar file '([^']*)'/) { 
    print $1, "\n" if $mess and $mess eq 'mess1'; 
    } 
} 

выход

/deploy/ENV/folder1/mess1.jar 
+0

'((?:/\ W +) *?/Mess1 \ .jar)' похоже на более простой поиск, поскольку файлы jar, по-видимому, называются в терминах поиска. –

+0

@HunterMcMillen: Я предполагал, что в действительности это не так, иначе в программе совсем мало смысла. Его можно было бы свести к 'print '/deploy/ENV/folder1/mess1.jar\n" ' – Borodin

+0

Достаточно честно, подумал, что стоит упомянуть. Трудно сказать без обратной связи после того, как вопрос был отправлен. –

-1

Я был в состоянии для достижения этой цели, используя следующий фрагмент кода.

if ($line=~/$flowname/){$flag=1;} 
if($flag==1){ 
if ($line =~/in Jar file '([^']*)'/){ 
@jardetails = `$displaycommand -b $1`; 
print @jardetails; 
} 
$flag=0;} 

Это работает для меня.

Смежные вопросы