Saltar al contenido

¿Cómo reemplazo una línea en un archivo usando PowerShell?

Solución:

Intente lo siguiente:

$file="D:homeApp_ConfigSitecore.config"
$regex = '(?<=<setting name="Media.MediaLinkServerUrl" value=")[^"]*'
(Get-Content $file) -replace $regex, 'https://newurl.com' | Set-Content $file

* Re Set-Content: En Windows PowerShell utiliza la codificación de caracteres de un byte heredada de su sistema de forma predeterminada (según la página de códigos ANSI activa), por lo que es posible que desee utilizar -Encoding para controlar la codificación del archivo de salida explícitamente; Potencia Shell [Core] 6+ por defecto es UTF-8 sin BOM.
* También tenga en cuenta los requisitos (...) alrededor de Get-Content llamar para asegurarse de que la canalización pueda volver a escribir en el mismo archivo que Get-Content ha leído.
* Si existe la posibilidad de que la etiqueta de apertura en cuestión (<setting ...>) se extiende varias líneas, usar
Get-Content -Raw $file (PSv3 +) para leer todo el contenido del archivo como una sola cuerda (gracias, perro mortal);
sin -Raw, Get-Content devuelve un formación de cadenas, que representan la entrada líneas.

Debido al uso de una expresión regular para que coincida con su configuración existente, alguna texto actualmente dentro value="..." coincide, por lo que este comando funcionará incluso cuando se ejecute repetidamente.

Por el contrario, lo que intentaste usa un efectivo literal (... value=" ") para encontrar qué reemplazar y, después de la primera ejecución (exitosa), ese literal ya no coincide y las ejecuciones posteriores fallan.

El comando anterior utiliza un enfoque simplificado para el reemplazo:

  • (?<=<setting name="Media.MediaLinkServerUrl" value=") es una afirmación retrospectiva(?<=...)) que coincide, pero no captura lo que coincide: encuentra la parte hasta e incluyendo la apertura " del valor que está intentando reemplazar, sin que ese prefijo forme parte de lo que se reemplazará.

  • [^"]* luego coincide con el valor completo, hasta, pero sin incluir el cierre ". ([^"] es un conjunto de caracteres que coincide con cualquier carácter otro que (^) a ", y * encuentra cualquier secuencia (posiblemente vacía) de tales caracteres.

  • Por lo tanto, debido a que la expresión regular capturó solo el valor en sí, todo lo que necesita especificar como cadena de reemplazo es el nuevo valor.

Utilice el método Reemplazar como este:

$file="D:homeApp_ConfigSitecore.config"
$find = '  <setting name="Media.MediaLinkServerUrl" value=" "/>'
$replace=" <setting name="Media.MediaLinkServerUrl" value="https://newurl.com"/>"

(Get-Content $file).replace($find, $replace) | Set-Content $file
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *