2013-12-12 6 views
0

Я вызвал выход из работы RkHunter в файл, который выглядит следующим образом:Удалить определенные строки из файла

[04:59:24] 55808 Trojan - Variant A [ Not found ] 
[04:59:24] 
[04:59:24] ADM Worm [ Not found ] 
[04:59:24] 
[04:59:25] AjaKit Rootkit [ Not found ] 
[04:59:25] 

Я попытался отфильтровать ненужные и это мой код до сих пор:

open(my $fh,$this_log); 
{  while (my $line = <$fh>) 
     { 
       chomp $line; 
       $line_ctr++; 
       if ($line_ctr < 55) 
       {  next; 
       } 
       if (index($line, "Checking") != -1) 
       {  next; 
       } 
       if (index($line, "Info") != -1) 
       {  next; 
       } 
       print "$line<br>"; 
     } 
} 
close $fh; 

Обратите внимание на альтернативные линии, которые не содержат ничего. Как мне их удалить?

ответ

1

отфильтровывает нежелательные выход

Если это только то, что вы хотите, и если вы хорошо с sed, то здесь не так профессионально еще рабочий раствор:

sed -r -i '/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\]$/d' <your_file_name> 

А вот perl путь:

perl -i -n -e 'print unless /^\[\d{2}:\d{2}:\d{2}\]$/' <your_file_name> 
1

Они не содержат ничего, они содержат часть [время]. Попробуйте что-нибудь вроде if (length($line)==10) { next; }. Возможно, вам придется изменить 10 на 11, в зависимости от того, есть ли невидимое пространство за время.

0

Это немного грубо, но вы могли бы включать в себя split в обработке:

#! /usr/bin/perl 

use strict; 
use 5.0100; 

my @input = ('[04:59:24] 55808 Trojan - Variant A [ Not found ]', '[04:59:24]', '[04:59:24] ADM Worm [ Not found ]',); 

foreach my $line (@input) { 
    my @splits = split(/ /, $line); 

    if (scalar(@splits) == 1) { 
    say "That must have been an empty line ($line)"; 
    } 
} 
1

Вы можете держать линии с альфа-символов (сообщения) с помощью следующей:

use strict; 
use warnings; 

while (<>) { 
    print if /[a-z]+/i; 
} 

использование командной строки: perl script.pl inFile [>outFile]

Последний необязательный параметр направляет вывод в файл.

Вывода на наборе данных:

[04:59:24] 55808 Trojan - Variant A [ Not found ] 
[04:59:24] ADM Worm [ Not found ] 
[04:59:25] AjaKit Rootkit [ Not found ] 

Или вы можете использовать следующее, что создает резервную копию (inFile.bak) из исходного файла:

perl -i.bak -ne 'print if /[a-z]+/i;' inFile 

Надеется, что это помогает!

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