Если PowerShell является опцией, определенную ниже функцию можно использовать для поиска и замены файлов. Например, чтобы найти 'a string'
в текстовых файлах в текущем каталоге, вы должны сделать:
dir *.txt | FindReplace 'a string'
Чтобы заменить 'a string'
другим значением, просто добавьте новое значение в конце:
dir *.txt | FindReplace 'a string' 'replacement string'
Вы также можете вызвать его для одного файла, используя FindReplace -path MyFile.txt 'a string'
.
function FindReplace( [string]$search, [string]$replace, [string[]]$path ) {
# Include paths from pipeline input.
$path += @($input)
# Find all matches in the specified files.
$matches = Select-String -path $path -pattern $search -simpleMatch
# If replacement value was given, perform replacements.
if( $replace ) {
# Group matches by file path.
$matches | group -property Path | % {
$content = Get-Content $_.Name
# Replace all matching lines in current file.
foreach( $match in $_.Group ) {
$index = $match.LineNumber - 1
$line = $content[$index]
$updatedLine = $line -replace $search,$replace
$content[$index] = $updatedLine
# Update match with new line value.
$match | Add-Member NoteProperty UpdatedLine $updatedLine
}
# Update file content.
Set-Content $_.Name $content
}
}
# Return matches.
$matches
}
Обратите внимание, что Select-String
также поддерживает совпадения регулярных выражений, но для простоты ограничен простыми совпадениями;) Вы также можете выполнить более надежную замену, такую как предложенный Jon , вместо простой перезаписи файла новый контент.