Todos os Métodos de Substituição no PowerShell
-
Introdução ao Método
replace()
no PowerShell -
Usar o Método
replace()
no PowerShell - Removendo Caracteres no PowerShell
- Substituindo Múltiplas Instâncias no PowerShell
- Usando o Operador de Substituição no PowerShell
- Removendo Caracteres no PowerShell
- Substituindo Múltiplas Instâncias no PowerShell
- Substituindo Strings Usando Regex no PowerShell
- Escapando Caracteres Regex no PowerShell

O Windows PowerShell pode trabalhar com textos e strings como muitas outras linguagens. Uma dessas características valiosas é o uso do Windows PowerShell para substituir caracteres, strings ou até mesmo texto dentro de arquivos.
Este artigo discutirá como substituir ou excluir caracteres, textos e palavras usando diferentes métodos de substituição do PowerShell.
Introdução ao Método replace()
no PowerShell
Podemos usar o Windows PowerShell para substituir caracteres em strings. Por exemplo, crie uma variável PowerShell com um tipo de dado string que usaremos ao longo deste artigo.
$string = 'hello, world'
Queremos substituir a palavra hello
dentro da string pela palavra hi
para que a variável $string
tenha um valor de hi, world
.
Para executar isso, o Windows PowerShell precisa descobrir onde encontrar a parte específica do texto e, uma vez encontrada, substitui essa parte do texto por um valor fornecido pelo usuário.
Usar o Método replace()
no PowerShell
Uma das maneiras mais convenientes de substituir strings no Windows PowerShell é usar o método replace()
. O método replace()
aceita dois argumentos.
- A string a ser encontrada.
- A string para substituir o texto encontrado.
Como podemos ver abaixo, o Windows PowerShell localiza a palavra hello
e a substitui pela string hi
. O método retorna o resultado final, hi, world
.
Vamos usar nossa variável $string
criada anteriormente como exemplo.
Código:
$string.replace('hello', 'hi')
Saída:
hi, world
Podemos invocar o método replace()
em qualquer caractere para substituir qualquer string literal por outra. O método replace()
não retorna nada se a string a ser substituída não for encontrada.
Além disso, não precisamos atribuir uma string a uma variável para substituir texto em uma string. Em vez disso, podemos chamar diretamente o método replace()
na string.
Código:
'hello world'.replace('hello', 'hi')
Removendo Caracteres no PowerShell
Talvez precisemos remover caracteres de um texto de outra string em vez de substituí-los por algo diferente. Também podemos fazer isso especificando uma string vazia.
Código:
$string.replace('hello', '')
Saída:
, world
Substituindo Múltiplas Instâncias no PowerShell
Como o método replace()
retorna um valor com um tipo de dado string, para substituir outra instância, podemos conectar e anexar outra chamada do método replace()
no final. O Windows PowerShell, então, invoca o método replace()
na saída real.
Código:
$string.replace('hello', '').replace('world', 'earth')
Saída:
, earth
Podemos encadear quantas chamadas ao método replace()
forem necessárias, mas devemos considerar usar o operador de substituição se tivermos múltiplas strings para substituir.
Usando o Operador de Substituição no PowerShell
Podemos também usar o operador de substituição do Windows PowerShell para substituir um texto. O operador de substituição é semelhante ao método que fornecemos uma string para encontrar e substituir.
Mas, ele tem uma vantagem significativa: usar expressões regulares (regex) para encontrar strings correspondentes. Usando o exemplo anterior, podemos usar o operador de substituição para substituir hello
por hi
de forma semelhante, como mostrado abaixo.
Código:
$string -replace 'hello', 'hi'
Saída:
hi, world
Removendo Caracteres no PowerShell
Assim como o método replace()
, também podemos excluir caracteres de uma string usando o operador de substituição. Diferente do método replace()
, também podemos excluir completamente a string como um argumento para substituir por, e você descobrirá o mesmo efeito.
Código:
$string -replace 'hello', ''
$string -replace 'hello'
Saída:
, world
, world
Substituindo Múltiplas Instâncias no PowerShell
Podemos também encadear o uso do operador de substituição.
Código:
$string -replace 'hello', 'hi' -replace 'world', 'earth'
Saída:
hi, earth
Substituindo Strings Usando Regex no PowerShell
Substituir strings no PowerShell com replace()
é limitado. Estamos restritos a usar apenas strings literais.
Não podemos usar curingas ou regex. Se você estiver executando operações intermediárias ou avançadas, devemos usar o operador de substituição.
Temos um script contendo uma string criada com uma variável. Queremos alterar a string para goodbye, world
independentemente do valor.
Isso ajudaria a transformar hello, world
e hi, world
em goodbye, world
. Precisamos usar uma expressão regular e corresponder a qualquer padrão específico no texto com regex para que isso aconteça.
Neste exemplo, podemos usar a expressão hello|hi
para corresponder ambas as strings necessárias usando o operador “ou” de regex ou o caractere pipe (|
).
Código:
'hello, world' -replace 'hello|hi', 'goodbye'
'hi, world' -replace 'hello|hi', 'goodbye'
Saída:
goodbye, world
goodbye, world
Uma vez que aprendemos a usar regex para encontrar strings, podemos usar o PowerShell para substituir strings curingas que correspondam a qualquer padrão.
Escapando Caracteres Regex no PowerShell
No exemplo de regex acima, a string a ser pesquisada não continha nenhum caractere especial de regex. No entanto, a linguagem de expressão regular possui certos caracteres que usa que não são interpretados literalmente, como a maioria das letras e números.
Por exemplo, talvez precisemos substituir texto em uma string. Essa string contém alguns caracteres especiais de regex, como um colchete e um ponto de interrogação.
Tentamos então substituir a string [hello]
por goodbye
.
Código:
PS> '[hello], world' -replace '[hello]', 'goodbye'
Saída:
[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed
Isso não é o que pretendíamos. Esse cenário acontece quando usamos caracteres especiais de regex dentro da string a ser encontrada ([hello]
).
Para evitar esse problema, podemos escapar esses caracteres especiais, prepondo uma barra invertida na frente de cada caractere, ou usar o método Escape()
. Abaixo, podemos ver o efeito de escapar cada caractere especial com uma barra invertida.
Código:
'[hello], world' -replace '\[hello\]', 'goodbye'
Saída:
goodbye, world
Alternativamente, podemos usar o método Escape()
do tipo regex para remover automaticamente todos os caracteres especiais.
Código:
'[hello], world' -replace ([regex]::Escape('[hello]')), 'goodbye'
Saída:
goodbye, world
Devemos usar o método Escape()
porque ele escapará todos os caracteres especiais, e não precisamos nos lembrar deles.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn