【发布时间】:2011-06-16 04:08:20
【问题描述】:
我有一个我正在尝试编写的 Powershell 脚本,以通过格式不佳的 XML 文件查找任何节点名称中包含“日期”一词的节点。即。
<System><SystemName>Acme</Systemname><SystemDate>313</SystemDate><SystemNumber>3</SystemNumber><FileDate>394</FileDate></System>
上述模式在整个文件中重复了数百次......对于大约 70MB 的数据。
真正的文件有更多的节点,没有换行或任何东西......所以它都出现在一行上。
我需要做的是扫描文件并查找以“日期”结尾且值不是 4 位的任何节点,并替换为 4 位值。
这是我到目前为止所拥有的......但看起来替换只是改变了第一次出现,而不是第一次匹配之后的所有其他匹配。
使用上面的例子,它应该找到关闭</SystemDate>和关闭</FileDate>节点,看到数字只有3个字符,替换为9999。
$infile=get-content z:\system.txt
write-host $infile.Length
$regex = New-Object System.Text.RegularExpressions.Regex ">\d\d\d</(.*Date)"
$replace = $regex.Replace($infile,"9999")
write-host $infile.Length
write-host $replace.Length
set-content -Value $replace z:\new_system.txt
任何帮助将不胜感激!
【问题讨论】:
标签: regex powershell