替换文件中的字符串,并对已完成的操作有一些反馈

时间:2015-09-14 22:10:44

标签: powershell replace powershell-v2.0

我想替换文件中的字符串,然后知道是否实际更换了某些内容。 我有很多要解析的文件,我知道只有极少数文件需要纠正。 所以我想只在发生更改时写出文件。此外,我希望能够在日志中跟踪更改...

例如,我一直在尝试这个:

(Get-Content $item.Fullname) | Foreach-Object {$_ -replace $old, $new} |
  Out-File $item.Fullname

但是使用我无法判断是否进行了任何更改...

你有解决方案吗?

2 个答案:

答案 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
}