¿Cómo reemplazar varias cadenas en una cadena usando PowerShell?
Recientemente, estuve trabajando en algunas cadenas en PowerShell para reemplazar varias cadenas en una cadena. Intenté diferentes formas de hacerlo. En este tutorial, le mostraré cómo reemplazar varias cadenas en una cadena usando PowerShell.
Para reemplazar varias cadenas en una cadena usando PowerShell, puede utilizar el operador -replace dentro de un bucle. Primero, defina una tabla hash con las subcadenas que se reemplazarán como claves y sus reemplazos como valores. Luego, repita las claves de la tabla hash y aplique el operador -replace para cada par clave-valor. Por ejemplo:
$string = "I have visited NY, CA, and TX."
$replacements = @{
"NY" = "New York"
"CA" = "California"
"TX" = "Texas"
}
foreach ($key in $replacements.Keys) {
$string = $string -replace $key, $replacements[$key]
}
Write-Output $stringEste guión mostrará: "He visitado Nueva York, California y Texas".
Ejecuté todos los scripts de PowerShell usando código VS, pero puedes usar cualquier editor.
Método 1: uso del operador -replace
El primer método para reemplazar varias cadenas en una cadena en PowerShell es utilizar el operador -replace.
El operador -replace usa expresiones regulares para reemplazar subcadenas en PowerShell.
Aquí tienes un ejemplo completo.
Suponga que tiene una cadena que contiene abreviaturas de estados y desea reemplazarlas con sus nombres completos. A continuación se muestra el guión completo.
$string = "I have visited NY, CA, and TX."
$replacements = @{
"NY" = "New York"
"CA" = "California"
"TX" = "Texas"
}
foreach ($key in $replacements.Keys) {
$string = $string -replace $key, $replacements[$key]
}
Write-Output $stringSalida:
I have visited New York, California, and Texas.Incluso puede ver la captura de pantalla a continuación para ver el resultado después de ejecutar el script de PowerShell anterior.
Leer Convertir cadena a booleana en PowerShell
Método 2: usar StringBuilder
También puede utilizar el método StringBuilder cuando trabaje con cadenas grandes en PowerShell. Permítame mostrarle cómo usar StringBuilder para reemplazar varias cadenas en una cadena usando PowerShell.
Supongamos que tiene una cadena con nombres de ciudades y desea reemplazarlos con sus respectivos estados.
Add-Type -AssemblyName "System.Text"
$string = "I have been to New York City, Los Angeles, and Houston."
$replacements = @{
"New York City" = "New York"
"Los Angeles" = "California"
"Houston" = "Texas"
}
$stringBuilder = New-Object System.Text.StringBuilder $string
foreach ($key in $replacements.Keys) {
$stringBuilder.Replace($key, $replacements[$key])
}
Write-Output $stringBuilder.ToString()Salida:
I have been to New York, California, and Texas.Método 3: uso de funciones personalizadas
También puede crear una función personalizada de PowerShell y reutilizarla para reemplazar varias cadenas.
Aquí tienes un ejemplo completo.
Creemos una función para reemplazar abreviaturas comunes como "EE.UU." por "Estados Unidos de América" y "DC" por "Distrito de Columbia".
function Replace-MultipleStrings {
param (
[string]$inputString,
[hashtable]$replacements
)
foreach ($key in $replacements.Keys) {
$inputString = $inputString -replace $key, $replacements[$key]
}
return $inputString
}
$string = "The USA capital is DC."
$replacements = @{
"USA" = "United States of America"
"DC" = "District of Columbia"
}
$result = Replace-MultipleStrings -inputString $string -replacements $replacements
Write-Output $resultSalida:
The United States of America capital is District of Columbia.Puede ver el resultado en la captura de pantalla a continuación después de ejecutar el script anterior usando el código VS.
Leer Buscar líneas que comiencen con una cadena específica en PowerShell
Método 4: usar expresiones regulares para patrones complejos
Si trabaja con patrones complejos, puede utilizar expresiones regulares.
A continuación se muestra un ejemplo para reemplazar fechas de MM/DD/AAAA a AAAA-MM-DD.
Supongamos que tiene fechas en el formato MM/DD/AAAA y desea convertirlas a AAAA-MM-DD.
$string = "The event is on 12/25/2023 and the deadline is 01/15/2024."
$pattern = "\b(\d{2})/(\d{2})/(\d{4})\b"
$replacement = '$3-$1-$2'
$result = $string -replace $pattern, $replacement
Write-Output $result
Salida:
The event is on 2023-12-25 and the deadline is 2024-01-15.Aquí está el resultado que puede ver en la siguiente captura de pantalla:
Conclusión
En PowerShell, puede reemplazar cadenas en una cadena usando varios métodos como el operador -replace, StringBuilder, funciones personalizadas, etc. Déjeme un comentario a continuación si no funcionó como se esperaba.


