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

  1. Introdução ao Método replace() no PowerShell
  2. Usar o Método replace() no PowerShell
  3. Removendo Caracteres no PowerShell
  4. Substituindo Múltiplas Instâncias no PowerShell
  5. Usando o Operador de Substituição no PowerShell
  6. Removendo Caracteres no PowerShell
  7. Substituindo Múltiplas Instâncias no PowerShell
  8. Substituindo Strings Usando Regex no PowerShell
  9. Escapando Caracteres Regex no PowerShell
Todos os Métodos de Substituição 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.

  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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn