我有一个大文件,我正在搜索它以查找和替换无效日期。我正在使用 REGEX 表达式来定位日期,然后确定它们是否有效。如果脚本发现无效日期,则需要将日期替换为当前日期。出于审计目的,我需要记录无效字符串和发现错误的行号。到目前为止(在 SO 的一些事先帮助下)我已经能够找到无效的日期,但我无法成功地更改它们。
这是我用来定位无效日期的代码。如何一次性定位和更改日期?
$matchInfos = @(Select-String -Pattern $regex -AllMatches -Path $file)
foreach ($minfo in $matchInfos)
{
#"LineNumber $($minfo.LineNumber)"
foreach ($match in @($minfo.Matches | Foreach {$_.Groups[0].value}))
{
if (([Boolean]($match -as [DateTime]) -eq $false ) -or ([DateTime]::parseexact($match,"MM-dd-yyyy",$null).Year -lt "1800")) {
Write-host "Invalid date on line $($minfo.LineNumber) - $match"
#Add-Content -Path $LOGFILE -Value "Invalid date on line $($minfo.LineNumber) - $match"
# Replace the invalid date with a corrected one
Write-Host "Replacing $match with $(Get-Date -Format "MM-dd-yyyy")"
#Add-Content -Path $LOGFILE -Value "Replacing $match with $(Get-Date -Format "MM-dd-yyyy")"
}
}
}