我想替换文件中的字符串,然后知道是否实际更换了某些内容。 我有很多要解析的文件,我知道只有极少数文件需要纠正。 所以我想只在发生更改时写出文件。此外,我希望能够在日志中跟踪更改...
例如,我一直在尝试这个:
(Get-Content $item.Fullname) | Foreach-Object {$_ -replace $old, $new} |
Out-File $item.Fullname
但是使用我无法判断是否进行了任何更改...
你有解决方案吗?
答案 0 :(得分:2)
分多步执行:
$content = [System.IO.File]::ReadAllText($item.FullName)
$changedContent = $content -replace $old,$new
if ($content -ne $changedContent) {
# A change was made
# log here
$changedContent | Set-Content $item.FullName
} else {
# No change
}
答案 1 :(得分:1)
使用select-string
grep
来检测字符串并记录消息,然后使用get- and set-content
替换字符串:
$item = 'myfile.txt'
$searchstr = "searchstring"
$replacestr = "replacestring"
if (select-string -path $item -pattern $searchstr) {
write-output "found a match for: $searchstr in file: $item"
$oldtext = get-content $item
$newtext = $oldtext.replace($searchstr, $replacestr)
set-content -path $item -value $newtext
}