2012-08-03 196 views
1

當我們使用正則表達式時,我是一個完整的noob,有人可以幫忙嗎?Powershell:使用正則表達式從字符串中提取文本

我需要的是域,那麼我將需要用a替換所有的(??)。

我需要提取什麼:(11)OPS-findb01(13)結構域(3)玉米(0)

最終結果應該是這樣的:.ops-findb01.domain.com。

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

假設一條線在同一時間:

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

這首先要搶行匹配結束部分,然後用點代替數字和圓括號。

未來,我強烈建議你學習正則表達式 - 它很簡單但是非常寶貴。正則表達式的一個很好的參考/教程是regular-expressions.info

+1

感謝您的幫助!找到1個問題,應該是[\ w-],因爲它需要搜索連字符。看我在學習:o) – Randy 2012-08-03 04:47:04

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 

} 
相關問題