2011-10-19 60 views
1

我想在Perl尋找的東西帶/ s功能如何從Perl中的日誌文件中刪除IP地址?

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 

回答

2

的替代代碼如下所示:

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

你也可以擺脫任何尾隨空格周圍刪除文字,以免得到一個發生刪除雙層空間,在這種情況下,變爲:

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

非常感謝!正是我在找什麼! –

+2

如果這適用於您,您可以隨時接受接受超時到期時的答案。 –

+0

這也將刪除'uid'和'pid'部分。 –

1

不是一個真正的答案,但你的問題是有點可疑(:

我懷疑你真正關心它到底是15位。

假設輸入是...(111.222.333.444)...或假設它是...(1.2.3.4)...。你不是真的要刪除正好15位,要刪除「的東西,看起來像IP地址」

類似爲您去除的UID等成立

邁克爾的回答將擺脫一切這是由括號包圍,這可能是你想要的。

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) 
0

此正則表達式將刪除任何類似於括號之間的IP地址。

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

999.999.999.999不是一個有效的IP地址,但它將被刪除。

編輯:這個問題的標題是相當誤導。 OP應該接受Michael的回答。

相關問題