我找到了很多用逗号和其他字符分割文件的例子。 但我的目标是获得没有数字签名的干净xml文件。
“脏”xml文件的结构是下一个(错误标签可选)签名可以在一个或两个字符串上:
<?xml version="1.0" encoding="windows-1251"?>
<File "Some txt">
<Doc "Some txt" />
<Error "Some txt" />
</File>
o000000ЯђeHђрь Ly]°Еоyн.‚а9Ут8$&Ъё• эИoтхњСђ7Мф YЁ7¤GПaм—1z©°QЩяк002094100901ЇьбSќ–ЏXMLд
你猜我需要下一个代码:
<?xml version="1.0" encoding="windows-1251"?>
<File "Some txt">
<Doc "Some txt" />
</File>
我正在尝试下一个脚本:
Get-ChildItem -Path C:\Scripts\TEST -Filter S*.xml | ForEach-Object -Process {
$filename = $_.FullName
Get-Content $_.FullName | Where-Object {$_ -notmatch 'o000000'} | Set-Content ($filename+".tmp")
Remove-Item $filename
Rename-Item ($filename+".tmp") $filename
}
可以删除一个字符串中的签名,但不能删除标记后的断路器,也不能删除第二个签名字符串。我该怎么办?
============================================ ==================================== PowerShell v 2.0的解决方案是(感谢 @Keith Hill ):
Get-ChildItem -Path C:\Scripts\TEST -Filter S*.xml | ForEach-Object -Process {
$filename = $_.FullName
$content = Get-Content $_.FullName | Out-String
$content -replace '(?ism)(.*?)\s+o000000.*$','$1' | Set-Content "${filename}.tmp"
Remove-Item $filename
Rename-Item ($filename+".tmp") $filename
}
答案 0 :(得分:0)
试试这个 - 将文件作为字符串读取然后你的正则表达式可以跨越行:
Get-ChildItem -Path C:\Scripts\TEST -Filter S*.xml | ForEach-Object -Process {
$filename = $_.FullName
$content = Get-Content $_.FullName -Raw
$content -replace '(?ism)(.*?)\s+o000000.*$','$1' | Set-Content "${filename}.tmp"
Remove-Item $filename
Rename-Item ($filename+".tmp") $filename
}