Si PowerShell est une option, la fonction définie ci-dessous peut être utilisée pour rechercher et remplacer des fichiers. , Vous feriez par exemple, pour trouver 'a string'
dans des fichiers texte dans le répertoire courant:
dir *.txt | FindReplace 'a string'
Pour remettre en place 'a string'
avec une autre valeur, il suffit d'ajouter la nouvelle valeur à la fin:
dir *.txt | FindReplace 'a string' 'replacement string'
Vous pouvez également l'appeler sur un seul fichier en utilisant 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
}
Notez que Select-String
prend également en charge les matchs regex, mais a été constrainted à des matchs simples pour la simplicité;) Vous pouvez également effectuer un remplacement plus robuste comme Jon suggéré, plutôt que d'écraser le fichier avec le nouveau contenu.
Il y a un compromis. Si vous savez que les fichiers auront probablement le SearchTerm, il peut être préférable de démarrer un fichier temporaire en copiant le contenu de l'autre fichier au fur et à mesure. Au lieu de chercher deux fois dans le fichier. – grepsedawk
Oui, je me demandais à ce sujet. Je me suis dit que je donnerais juste l'algorithme simple à la place :) –