Perl 从文件中删除某些行

Perl 从文件中删除某些行,perl,cgi,Perl,Cgi,我将运行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); { whi

我将运行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;
打开(我的$fh,$this_日志);
{while(我的$line=)
{
chomp$行;
$line_ctr++;
如果($line\u ctr<55)
{下一步;
}
如果(索引($line,“Checking”)!=-1)
{下一步;
}
如果(索引($line,“Info”)!=-1)
{下一步;
}
打印“$line
”; } } 收盘价$fh;

请注意不包含任何内容的备用行。我该如何移除它们

它们不包含任何内容,它们包含[时间]部分。尝试类似于
if(length($line)==10){next;}
。您可能需要将10更改为11,这取决于时间后面是否有不可见的空格。

它们不包含任何内容,而是包含[time]部分。尝试类似于
if(length($line)==10){next;}
。您可能需要将10更改为11,这取决于时间后面是否有不可见的空格。

它们不包含任何内容,而是包含[time]部分。尝试类似于
if(length($line)==10){next;}
。您可能需要将10更改为11,这取决于时间后面是否有不可见的空格。

它们不包含任何内容,而是包含[time]部分。尝试类似于
if(length($line)==10){next;}
。您可能需要将10更改为11,这取决于时间后面是否有不可见的空间

过滤掉不需要的输出

如果这只是您想要的,并且您对
sed
没有意见,那么这里就不是一个专业但有效的解决方案:

sed -r -i '/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\]$/d' <your_file_name>
过滤掉不需要的输出

如果这只是您想要的,并且您对
sed
没有意见,那么这里就不是一个专业但有效的解决方案:

sed -r -i '/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\]$/d' <your_file_name>
过滤掉不需要的输出

如果这只是您想要的,并且您对
sed
没有意见,那么这里就不是一个专业但有效的解决方案:

sed -r -i '/^\[[0-9]{2}:[0-9]{2}:[0-9]{2}\]$/d' <your_file_name>
过滤掉不需要的输出

如果这只是您想要的,并且您对
sed
没有意见,那么这里就不是一个专业但有效的解决方案:

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

这有点粗糙,但您可以将
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)";
  }
}

这有点粗糙,但您可以将
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)";
  }
}

这有点粗糙,但您可以将
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)";
  }
}

这有点粗糙,但您可以将
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)";
  }
}

您可以使用以下方法保留带有字母字符(消息)的行:

use strict;
use warnings;

while (<>) {
    print if /[a-z]+/i;
}
或者,您可以使用以下方法创建原始文件的备份(infle.bak):

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

希望这有帮助

您可以使用以下方法保留带有字母字符(消息)的行:

use strict;
use warnings;

while (<>) {
    print if /[a-z]+/i;
}
或者,您可以使用以下方法创建原始文件的备份(infle.bak):

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

希望这有帮助

您可以使用以下方法保留带有字母字符(消息)的行:

use strict;
use warnings;

while (<>) {
    print if /[a-z]+/i;
}
或者,您可以使用以下方法创建原始文件的备份(infle.bak):

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

希望这有帮助

您可以使用以下方法保留带有字母字符(消息)的行:

use strict;
use warnings;

while (<>) {
    print if /[a-z]+/i;
}
或者,您可以使用以下方法创建原始文件的备份(infle.bak):

perl -i.bak -ne 'print if /[a-z]+/i;' inFile
希望这有帮助