Estoy escribiendo un script para personalizar un archivo de configuración. Quiero reemplazar varias instancias de cadenas dentro de este archivo e intenté usar PowerShell para hacer el trabajo.
Funciona bien para un solo reemplazo, pero hacer múltiples reemplazos es muy lento porque cada vez tiene que analizar todo el archivo nuevamente, y este archivo es muy grande. El guión se ve así:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1new'
} | Set-Content $destination_file
Quiero algo como esto, pero no sé cómo escribirlo:
$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
fuente
fuente
$c = Get-Content $original_file; $c | ... | Set-Content $original_file
.Para que la publicación de George Howarth funcione correctamente con más de un reemplazo, debe eliminar la ruptura, asignar la salida a una variable ($ line) y luego generar la variable:
fuente
Con la versión 3 de PowerShell, puede encadenar las llamadas de reemplazo juntas:
fuente
Suponiendo que solo puede tener uno
'something1'
o'something2'
, etc. por línea, puede usar una tabla de búsqueda:Si puede tener más de uno de esos, simplemente elimine el
break
en laif
declaración.fuente
Una tercera opción, para un one-liner canalizado, es anidar los -replaces:
Y:
Esto preserva el orden de ejecución, es fácil de leer y encaja perfectamente en una tubería. Prefiero usar paréntesis para control explícito, auto-documentación, etc. Funciona sin ellos, pero ¿hasta qué punto confías en eso?
-Replace es un operador de comparación, que acepta un objeto y devuelve un objeto presuntamente modificado. Es por eso que puede apilarlos o anidarlos como se muestra arriba.
Por favor mira:
fuente