1

正規表現に関しては、私は完全な初心者です。誰かがこれを手伝ってくれますか?

必要なのはドメインです。次に、すべての (??) を .

必要なもの 抽出: (11)ops-findb01(13)domain(3)com(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)

ログ ファイルの形式は、常に上記の形式になります。

4

2 に答える 2

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

}
于 2012-08-03T12:08:57.800 に答える
1

一度に 1 行と仮定すると、次のようになります。

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

これは最初に行を一致させて最後の部分を取得し、次に数字と括弧をドットに置き換えます。

将来のために、正規表現を学ぶことを強くお勧めします。これは単純ですが非常に貴重です。正規表現の優れたリファレンス/チュートリアルはregular-expressions.infoです。

于 2012-08-03T02:43:40.990 に答える