Todos los métodos de reemplazo en PowerShell
-
Introducción al método
replace()
en PowerShell -
Usar el método
replace()
en PowerShell - Eliminando caracteres en PowerShell
- Reemplazando múltiples instancias en PowerShell
- Usando el operador de reemplazo en PowerShell
- Eliminando caracteres en PowerShell
- Reemplazando múltiples instancias en PowerShell
- Reemplazando cadenas usando regex en PowerShell
- Escape de caracteres regex en PowerShell

Windows PowerShell puede trabajar con textos y cadenas como muchos otros lenguajes. Una de esas valiosas características es utilizar Windows PowerShell para reemplazar caracteres, cadenas o incluso texto dentro de archivos.
Este artículo discutirá cómo reemplazar o eliminar caracteres, textos y palabras utilizando diferentes métodos de reemplazo de PowerShell.
Introducción al método replace()
en PowerShell
Podemos usar Windows PowerShell para reemplazar caracteres en cadenas. Por ejemplo, creamos una variable de PowerShell con un tipo de dato cadena que utilizaremos a lo largo de este artículo.
$string = 'hello, world'
Queremos reemplazar la palabra hello
dentro de la cadena con la palabra hi
para que la variable $string
tenga un valor de hi, world
.
Para ejecutar eso, Windows PowerShell necesita averiguar dónde encontrar la parte específica del texto, y una vez que se encuentra, reemplaza esa porción del texto con un valor proporcionado por el usuario.
Usar el método replace()
en PowerShell
Una de las formas más convenientes de reemplazar cadenas en Windows PowerShell es utilizar el método replace()
. El método replace()
acepta dos argumentos.
- La cadena a encontrar.
- La cadena para reemplazar el texto encontrado.
Como podemos ver a continuación, Windows PowerShell localiza la palabra hello
y la reemplaza con la cadena hi
. El método devuelve el resultado final, hi, world
.
Utilicemos nuestra variable $string
creada anteriormente como ejemplo.
Código:
$string.replace('hello', 'hi')
Salida:
hi, world
Podemos invocar el método replace()
en cualquier carácter para reemplazar cualquier cadena literal por otra. El método replace()
no devuelve nada si la cadena a reemplazar no se encuentra.
Además, no necesitamos asignar una cadena a una variable para reemplazar texto en una cadena. En su lugar, podemos llamar directamente al método replace()
en la cadena.
Código:
'hello world'.replace('hello', 'hi')
Eliminando caracteres en PowerShell
Quizás necesitamos eliminar caracteres de un texto en lugar de reemplazarlos por algo más. También podemos hacer eso especificando una cadena vacía.
Código:
$string.replace('hello', '')
Salida:
, world
Reemplazando múltiples instancias en PowerShell
Dado que el método replace()
devuelve un valor con un tipo de dato cadena, para reemplazar otra instancia, podemos conectar y agregar otra llamada al método replace()
al final. Entonces, Windows PowerShell invoca el método replace()
en la salida real.
Código:
$string.replace('hello', '').replace('world', 'earth')
Salida:
, earth
Podemos encadenar tantas llamadas al método replace()
como sea necesario, pero deberíamos considerar usar el operador de reemplazo si tenemos múltiples cadenas para reemplazar.
Usando el operador de reemplazo en PowerShell
También podemos usar el operador de reemplazo de Windows PowerShell para reemplazar un texto. El operador de reemplazo es similar al método, donde proporcionamos una cadena para encontrar y reemplazar.
Pero, tiene una ventaja significativa: usar expresiones regulares (regex) para encontrar cadenas coincidentes. Usando el ejemplo anterior, podemos usar el operador de reemplazo para reemplazar hello
con hi
de manera similar, como se muestra a continuación.
Código:
$string -replace 'hello', 'hi'
Salida:
hi, world
Eliminando caracteres en PowerShell
Al igual que el método replace()
, también podemos eliminar caracteres de una cadena utilizando el operador de reemplazo. A diferencia del método replace()
, también podemos excluir totalmente la cadena como un argumento para reemplazar, y descubrirás el mismo efecto.
Código:
$string -replace 'hello', ''
$string -replace 'hello'
Salida:
, world
, world
Reemplazando múltiples instancias en PowerShell
También podemos encadenar los usos del operador de reemplazo.
Código:
$string -replace 'hello', 'hi' -replace 'world', 'earth'
Salida:
hi, earth
Reemplazando cadenas usando regex en PowerShell
Reemplazar cadenas en PowerShell con el método replace()
es limitado. Estamos restringidos solo a usar cadenas literales.
No podemos usar comodines ni regex. Si estás realizando acciones intermedias o avanzadas, deberíamos usar el operador de reemplazo.
Tenemos un script que contiene una cadena creada con una variable. Queremos cambiar la cadena a goodbye, world
sin importar el valor.
Ayudaría a transformar hello, world
y hi, world
en goodbye, world
. Necesitamos usar una expresión regular y coincidir con casi cualquier patrón específico en el texto con regex para que esto suceda.
En este ejemplo, podemos usar la expresión hello|hi
para coincidir ambas cadenas requeridas usando el operador “o” de regex o el carácter de barra vertical (|
).
Código:
'hello, world' -replace 'hello|hi', 'goodbye'
'hi, world' -replace 'hello|hi', 'goodbye'
Salida:
goodbye, world
goodbye, world
Una vez que aprendemos a utilizar regex para encontrar cadenas, podemos usar PowerShell para reemplazar cadenas comodín que coincidan con cualquier patrón.
Escape de caracteres regex en PowerShell
En el ejemplo de regex anterior, la cadena a buscar no contenía ningún carácter regex especial. Sin embargo, el lenguaje de expresiones regulares tiene ciertos caracteres que utiliza que no se interpretan literalmente como la mayoría de letras y números.
Por ejemplo, tal vez necesitamos reemplazar texto en una cadena. Esa cadena contiene un par de caracteres regex especiales como un corchete y un signo de interrogación.
Entonces intentamos reemplazar la cadena [hello]
con un goodbye
.
Código:
PS> '[hello], world' -replace '[hello]', 'goodbye'
Salida:
[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed
Eso no es lo que pretendíamos. Este escenario ocurre cuando usamos caracteres regex especiales dentro de la cadena a encontrar ([hello]
).
Para evitar este problema, podemos escapar estos caracteres especiales precediendo cada carácter con una barra invertida o usando el método Escape()
. Abajo podemos ver el efecto de escapar cada carácter especial con una barra invertida.
Código:
'[hello], world' -replace '\[hello\]', 'goodbye'
Salida:
goodbye, world
Alternativamente, podemos usar el método Escape()
del tipo regex para eliminar todos los caracteres especiales automáticamente.
Código:
'[hello], world' -replace ([regex]::Escape('[hello]')), 'goodbye'
Salida:
goodbye, world
Deberíamos usar el método Escape()
porque escapará todos los caracteres especiales, y no tenemos que recordarlos.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn