Powershell:使用Regex从字符串中提取文本

时间:2012-08-03 02:21:43

标签: regex string powershell text-extraction

当它来到正则表达式时,我是一个完整的菜鸟,有人可以帮忙吗?

我需要的是域名,然后我需要用a替换所有(??)。

我需要提取的内容:(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)

日志文件格式将始终如您所见

2 个答案:

答案 0 :(得分:1)

一次假设一行:

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

首先匹配该行以获取结束部分,然后用点替换数字和括号。

对于未来,我强烈建议你学习正则表达式 - 这很简单但非常宝贵。正则表达式的一个很好的参考/教程是regular-expressions.info

答案 1 :(得分: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

}