2011-10-19 2 views
1

나는이 내가 가진 문자열이Perl의 로그 파일에서 IP 주소를 제거하려면 어떻게해야합니까?

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

펄의/s의 기능을 가진 뭔가를 검색 한 후 텍스트의 특정 금액을 대체 할 내가 "("검색 할 15 삭제 이 IP 주소를 삭제하려면이 후 숫자, 나는 또한 UID afterword 함께 할 싶습니다.

작동하도록 생각하는 방식은 $newvar =~ s/\(\d{15}//g, 있지만 작동하지 않습니다. 텍스트를보고 싶어요. 이렇게 :

같은 360,733,210

답변

2

대체 코드가 보일 것이다 : 당신은 또한 주위의 텍스트를 삭제 후행 공백을 제거 할 수 있습니다

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

삭제가 발생 더블 공간을 얻을하지 않도록,이 경우을에 별로 대답

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

정말 고마워요! 정확히 내가 무엇을 찾고 있었는지! –

+2

이 방법이 효과가 있다면 수락 제한 시간이 만료되면 언제든지 대답을 수락 할 수 있습니다. –

+0

이렇게하면 'uid'및 'pid'부분도 제거됩니다. –

1

을하지만 문제는 (약간 의문이다 :이된다

실제로 당신을 의심 정확히 15 자리입니다 관심.

입력이 ...(111.222.333.444)...이거나 ...(1.2.3.4)...이라고 가정합니다. 당신은 정말 당신이 유사

등의 UID의 당신의 제거를위한 마찬가지 "IP 주소처럼 보이는 것들"제거 할 정확히 15 자리를 제거하지 않는

마이클의 대답은 모든 것을 제거합니다

그것은 당신이 원하는 것일 수있는 괄호로 둘러싸여 있습니다.

4

@ 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는 마이클의 대답을 받아 들여야합니다.

관련 문제