我已经将运行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;
注意不包含任何内容的备用行。我该如何去除它们?
答案 0 :(得分:1)
它们不包含任何内容,它们包含[时间]部分。尝试类似if (length($line)==10) { next; }
的内容。您可能需要将10更改为11,具体取决于时间背后是否存在不可见空间。
答案 1 :(得分: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>
答案 2 :(得分: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
希望这有帮助!
答案 3 :(得分: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)";
}
}