J'écris un script pour personnaliser un fichier de configuration. Je souhaite remplacer plusieurs instances de chaînes dans ce fichier et j'ai essayé d'utiliser PowerShell pour faire le travail.
Cela fonctionne bien pour un seul remplacement, mais effectuer plusieurs remplacements est très lent car à chaque fois, il doit analyser à nouveau le fichier entier, et ce fichier est très volumineux. Le script ressemble à ceci:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1new'
} | Set-Content $destination_file
Je veux quelque chose comme ça, mais je ne sais pas comment l'écrire:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1aa'
$_ -replace 'something2', 'something2bb'
$_ -replace 'something3', 'something3cc'
$_ -replace 'something4', 'something4dd'
$_ -replace 'something5', 'something5dsf'
$_ -replace 'something6', 'something6dfsfds'
} | Set-Content $destination_file
powershell
replace
Ivo Bosticky
la source
la source
$c = Get-Content $original_file; $c | ... | Set-Content $original_file
.Pour que la publication de George Howarth fonctionne correctement avec plus d'un remplacement, vous devez supprimer la rupture, affecter la sortie à une variable ($ line), puis afficher la variable:
la source
Avec la version 3 de PowerShell, vous pouvez enchaîner les appels de remplacement:
la source
En supposant que vous ne pouvez en avoir qu'un
'something1'
ou'something2'
, etc. par ligne, vous pouvez utiliser une table de recherche:Si vous pouvez en avoir plusieurs, supprimez simplement le
break
dans l'if
instruction.la source
Une troisième option, pour un one-liner pipelined, consiste à imbriquer les -replaces:
Et:
Cela préserve l'ordre d'exécution, est facile à lire et s'intègre parfaitement dans un pipeline. Je préfère utiliser des parenthèses pour le contrôle explicite, l'auto-documentation, etc. Cela fonctionne sans elles, mais dans quelle mesure faites-vous confiance?
-Replace est un opérateur de comparaison, qui accepte un objet et renvoie un objet vraisemblablement modifié. C'est pourquoi vous pouvez les empiler ou les imbriquer comme indiqué ci-dessus.
S'il te plait regarde:
la source