如何从Perl中的日志文件中删除IP地址?

时间:2011-10-19 18:09:18

标签: perl

我想在perl

中搜索带/ s函数的内容后替换特定数量的文本

libpc07 (158.136.80.63) connect to service annek initially as user annek (uid=7186 gid=199) (pid 6117)

这是我拥有的字符串,我想搜索“(”并删除15位数后删除IP地址,我也希望用UID后跟词。

我认为它应该起作用的方式是$newvar =~ s/\(\d{15}//g; 但它不起作用。我希望文本看起来像这样:

libpc07 connect to service annek initially as user annek

4 个答案:

答案 0 :(得分:4)

Per @jwd的评论,请确保您只删除IPv4地址。

#!/usr/bin/env perl

use warnings; use strict;
use Regexp::Common qw/net/;

while (my $line = <DATA>) {
    $line =~ s!\($RE{net}{IPv4}\) !!;
    print $line;
}

__DATA__
libpc07 (158.136.80.63) connect to service annek initially as user annek (uid=7186 gid=199) (pid 6117)

答案 1 :(得分:2)

替换代码如下所示:

$newvar =~ s/\([^)]+\)//g;

您可能还想删除已删除文本周围的任何尾随空格,以便在删除发生时不会出现双重空格,在这种情况下它会变为:

$newvar =~ s/\([^)]+\)\s*//g;

答案 2 :(得分:1)

不是一个真正的答案,但你的问题有点可疑(:

我怀疑你真的在乎它正好是15位数。

假设输入为...(111.222.333.444)...或假设为...(1.2.3.4)...。你真的不想删除正好15位数,你想要删除“看起来像IP地址的东西”

类似适用于删除UID等。

迈克尔的回答将摆脱括号所围绕的一切,这可能就是你想要的。

答案 3 :(得分:0)

此正则表达式将删除类似于括号内的IP地址的任何内容。

$line =~ s/\((?:[0-9]{1,3}\.){3}[0-9]{1,3}\) //;

999.999.999.999不是有效的IP地址,但无论如何都会被删除。

编辑:这个问题的标题很容易引起误解。 OP应该接受Michael的回答。