当它来到正则表达式时,我是一个完整的菜鸟,有人可以帮忙吗?
我需要的是域名,然后我需要用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)
日志文件格式将始终如您所见
答案 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
}