我想在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
答案 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的回答。