HOWTO · PowerShell

Todos os Métodos de Substituição no PowerShell

Este artigo discutirá como substituir ou excluir caracteres, textos e palavras, usando diferentes métodos de substituição do PowerShell.

Nesta página

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.

  1. A string a ser encontrada.
  2. 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.