加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

regex – 在Perl中打印不带子字符串的字符串

发布时间:2020-12-16 06:20:57 所属栏目:大数据 来源:网络整理
导读:我有一个Logfile,其格式如下所示: [Time] [mmm] [DATA] [rule] [a.a.a.a][Time] [ppp] [DATA] [rule] [a.a.a.a][Time] [mmm] [DATA] [rule] [c.c.c.c] 无法找到一种方法来打印这个没有特定子串的字符串.我希望能够在没有匹配[mmm]和[a.a.a.a]的子字符串行的
我有一个Logfile,其格式如下所示:

[Time] [mmm] [DATA] [rule] [a.a.a.a]
[Time] [ppp] [DATA] [rule] [a.a.a.a]
[Time] [mmm] [DATA] [rule] [c.c.c.c]

无法找到一种方法来打印这个没有特定子串的字符串.我希望能够在没有匹配[mmm]和[a.a.a.a]的子字符串行的情况下打印整个字符串输出.最终的输出是:

[Time] [ppp] [DATA] [rule] [a.a.a.a]  
[Time] [mmm] [DATA] [rule] [c.c.c.c]

我是否将索引模块与两个子字符串一起使用或者以某种方式使用grep?我是以错误的方式看待这个吗?任何帮助深表感谢!!!

在我的perl脚本中,我有一个搜索它的部分并将此部分打印为字符串:

sub Section
{
    my @event_rule = ("A","B","C");

    foreach (@event_rule)
    {
                    my $result1 = `fgrep -h 'DATA' $logfile1 | grep "$_" | head -n10`;
                    if (length $result1)
                    {
                        print "$result1n";
            }
            }
  }

解决方法

不需要像grep这样的外部程序:

#!/usr/bin/perl
use warnings;
use strict;

my @rule  = ('[mmm]','[a.a.a.a]');
my $regex = join '.*',map quotemeta,@rule; # Create one regular expression from the "rules".
$regex    = qr/$regex/;                      # Compile it.

my $c = 0;
while (<>) {
    $c += print if /DATA/ && ! /$regex/;
    last if $c > 9;                          # Only print the first 10 lines.
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读