2012-08-03 3 views
1

정규식에 올 때 완전한 멍청한 놈입니다. 누군가 도와 드릴 수 있습니까?Powershell : Regex를 사용하여 문자열에서 텍스트를 추출하십시오.

도메인이 필요하면 모든 (??)을 a로 대체해야합니다.

내가 추출을 필요로하는 것 : .OPS-findb01.domain.com : (11) OPS-findb01 (13) 도메인 (3) COM (0)

최종 결과는 같아야합니다.

$betterline = ($line -match "\(\d+\)(?:\w+\(\d+\))+$") -replace "\(\d+\)", "."

이 첫 번째 잡기 위해 라인을 일치 :

8/2/2012 3:37:59 PM 0908 PACKET 0000000002CC4F60 UDP Rcv 10.10.10.10 563a Q [0001 D NOERROR] A  (11)ops-findb01(13)domain(3)com(0) 
8/2/2012 3:37:59 PM 0908 PACKET 0000000002C32810 UDP Rcv 10.10.10.10 6f24 Q [0001 D NOERROR] A  (11)ops-findb01(13)domain(3)com(0) 
8/2/2012 3:38:00 PM 0908 PACKET 00000000029EDC00 UDP Rcv 10.10.10.10 459a Q [0001 D NOERROR] A  (3)www(6)google(3)com(0) 
8/2/2012 3:38:00 PM 0908 PACKET 0000000002CC4F60 UDP Rcv 10.10.10.10 d47e Q [0001 D NOERROR] PTR (2)dr(7)_dns-sd(4)_udp(1)0(2)40(1)5(2)10(7)in-addr(4)arpa(0) 
8/2/2012 3:38:00 PM 0908 PACKET 0000000002C32810 UDP Rcv 10.10.10.10 0b3c Q [0001 D NOERROR] PTR (2)db(7)_dns-sd(4)_udp(1)0(1)0(1)5(2)10(7)in-addr(4)arpa(0) 
8/2/2012 3:38:00 PM 0908 PACKET 00000000029EDC00 UDP Rcv 10.10.10.10 8890 Q [0001 D NOERROR] A  (2)dl(6)javafx(3)com(0) 
8/2/2012 3:38:00 PM 0908 PACKET 0000000002CC4F60 UDP Rcv 10.10.10.10 60e7 Q [0001 D NOERROR] A  (7)trading(9)scottrade(3)com(0) 

로그 파일 형식은 항상

답변

1

한 번에 하나 개의 라인을 가정 위에 무엇을보고있을 것이다 마지막 부분은 숫자와 괄호를 점으로 바꿉니다.

앞으로는 정규식을 배우는 것이 좋습니다. 이는 간단하면서도 매우 중요합니다. regex에 대한 훌륭한 참고 자료/튜토리얼은 regular-expressions.info입니다.

+1

감사합니다! 하이픈 검색이 필요했기 때문에 1 문제가 발견되었으므로 [\ w-]이어야합니다. 나는 배우고있다 : o) – Randy

1

다음은 정규 표현식의 광범위한 사용하지 않는 다른 옵션들 : 당신의 도움에 대한

Get-Content file.txt | Foreach-Object { 

    #split the line by space 
    $line = $_.split() 

    # get the last element and replace (one or more digits) with a dot 
    $line[-1] = $line[-1] -replace '\(\d+\)','.' 

    #join the line back using a space 
    $line -join ' ' # join the line back using a space 

}