Como Substituir um Texto em um Arquivo Usando PowerShell

  1. Usar Get-Content e Set-Content para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell
  2. Usar a Classe File para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell
  3. Substituir Cada Ocorrência de uma String em Múltiplos Arquivos com PowerShell
  4. Conclusão
Como Substituir um Texto em um Arquivo Usando PowerShell

O PowerShell é uma ferramenta poderosa para gerenciar arquivos e pastas. Ele permite criar, copiar, excluir, mover, renomear e visualizar arquivos e pastas no sistema.

Este tutorial irá apresentar diferentes métodos para substituir cada ocorrência de uma string em um arquivo com PowerShell.

Usar Get-Content e Set-Content para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell

O comando 'Get-Content' recupera o conteúdo de um item no caminho fornecido, como o texto em um arquivo. O cmdlet 'Set-Content' é uma ferramenta de processamento de strings que permite adicionar novo conteúdo a um arquivo ou substituir o conteúdo existente.

Você pode usar o cmdlet Get-Content e Set-Content para substituir cada ocorrência de uma string em um arquivo.

Sintaxe:

(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'

Na sintaxe, substituímos 'OldString' pela string que queremos substituir e 'NewString' pela string que queremos colocar em seu lugar. Certifique-se de substituir 'Path\to\Your\File.txt' pelo caminho real do seu arquivo.

Vamos dar um exemplo. Temos um arquivo de texto (test.txt) no diretório (C:\New) com o seguinte conteúdo.

Get-Content C:\New\test.txt

Saída:

Welcome to Linux tutorials.
Linux is free.
Linux is powerful.

Agora, vamos substituir cada ocorrência da string 'Linux' por 'PowerShell' em um arquivo test.txt com a ajuda do parâmetro -Replace. Os parênteses () são necessários ao redor do Get-Content.

(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

Em seguida, visualize o conteúdo de um arquivo test.txt para verificar as alterações.

Get-Content C:\New\test.txt

Como você pode ver, Linux foi substituído com sucesso por PowerShell.

Saída:

Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.

Este método usa um array de strings para encontrar e substituir strings em um arquivo, pois o cmdlet Get-Content retorna um array. É mais fácil substituir strings se o Get-Content retornar uma única string.

Podemos usar o parâmetro -Raw, como mostrado abaixo. O parâmetro -Raw é usado para garantir que o conteúdo de 'C:\New\test.txt' seja lido como uma única string, permitindo a substituição eficiente de 'Linux' por 'PowerShell' em todo o arquivo.

(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt

Neste código, lemos o conteúdo de um arquivo localizado em 'C:\New\test.txt' como uma única string. Em seguida, usamos o operador -Replace para encontrar e substituir todas as ocorrências de 'Linux' por 'PowerShell' dentro dessa string.

Finalmente, salvamos o conteúdo modificado de volta no mesmo arquivo, atualizando-o efetivamente com o novo texto. Este código é uma maneira direta de realizar substituições de texto em um arquivo usando PowerShell.

Usar a Classe File para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell

A classe File fornece métodos estáticos para operações comuns, como criar, copiar, mover, abrir, excluir e anexar a um único arquivo. Use o método Replace() da classe File para substituir o conteúdo de um arquivo especificado.

Sintaxe:

$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)

Parâmetros:

  • "FilePath": Isso deve ser substituído pelo caminho real do arquivo.
  • "OldString": Esta é a string que você deseja substituir.
  • "NewString": Esta é a string que você deseja colocar em seu lugar.

O método ReadAllText() abre um arquivo de texto, lê todo o texto nesse arquivo e, em seguida, fecha o arquivo.

O método WriteAllText() cria um novo arquivo, escreve a string específica no arquivo e fecha o arquivo. Ele é sobrescrito se o arquivo de destino já existir na localização.

Vamos dar um exemplo. Temos um arquivo de texto (python.txt) no diretório (C:\New) com o seguinte conteúdo.

Get-Content C:\New\python.txt

Saída:

Find the best Python tutorials and learn Python easily from DelftStack.

Agora, vamos substituir cada ocorrência de uma string em um arquivo usando o método da classe File.

$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)

No código acima, começamos criando uma variável chamada $string, que armazenará o conteúdo modificado do arquivo 'C:\New\python.txt' após realizar a substituição de texto. Usando [System.IO.File]::ReadAllText("C:\New\python.txt"), lemos todo o conteúdo do arquivo e salvamos em $string.

No passo seguinte, usamos o método Replace() para localizar todas as instâncias de "Python" dentro do conteúdo e substituí-las por "JavaScript", atualizando efetivamente o texto. Finalmente, usamos [System.IO.File]::WriteAllText("C:\New\python.txt", $string) para escrever o conteúdo modificado de volta no mesmo arquivo, sobrescrevendo o texto original e preservando nossas alterações.

Verifique as alterações feitas em C:\New\python.txt.

Get-Content C:\New\python.txt

Saída:

Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.

Na saída, podemos ver que "Python" foi substituído pela palavra "JavaScript".

Substituir Cada Ocorrência de uma String em Múltiplos Arquivos com PowerShell

Os métodos acima substituem uma string em um único arquivo. Às vezes, você pode precisar substituir a mesma string em vários arquivos.

Nesse caso, você pode usar o comando abaixo para substituir cada ocorrência de uma string especificada em múltiplos arquivos.

Get-ChildItem 'C:\New\*.txt' | foreach {
     (Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}

No código acima, começamos usando Get-ChildItem para coletar uma lista de arquivos '.txt' no diretório 'C:\New'. O caractere curinga asterisco * especifica todos os arquivos com a extensão de nome de arquivo .txt.

Em seguida, fazemos um loop por cada arquivo, lemos seu conteúdo com Get-Content, e aplicamos uma operação de substituição, mudando 'weekly' para 'monthly', usando o operador -Replace. O conteúdo modificado é então escrito de volta no mesmo arquivo com Set-Content.

Esse processo se repete para cada arquivo no diretório, substituindo eficientemente 'weekly' por 'monthly' em múltiplos arquivos.

Nós também podemos usar o parâmetro -Recurse para substituir uma string em arquivos no diretório especificado e em seus subdiretórios.

Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
     (Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}

Neste código, começamos usando Get-ChildItem para montar uma lista de arquivos '.txt' dentro de 'C:\New' e seus subdiretórios. A opção -Recurse garante que buscamos esses arquivos não apenas no diretório especificado, mas também em seus subdiretórios.

Em seguida, usamos um par de loops ForEach para acessar o conteúdo de cada arquivo. Dentro do loop interno, usamos o operador -Replace para substituir 'weekly' por 'monthly' no texto.

Por fim, salvamos o conteúdo ajustado de volta no mesmo arquivo. Este processo percorre todos os arquivos em 'C:\New' e suas subpastas, permitindo substituir efetivamente 'weekly' por 'monthly' em vários arquivos e diretórios aninhados.

Conclusão

Neste artigo, analisamos diferentes maneiras de substituir strings em um único arquivo usando os cmdlets Get-Content e Set-Content, oferecendo tanto um método básico quanto um método mais eficiente com o parâmetro -Raw. Subsequentemente, utilizamos o poder da classe File para substituir texto dentro de arquivos, demonstrando uma técnica mais avançada.

Além disso, ampliamos nosso conhecimento substituindo texto em vários arquivos em um diretório e seus subdiretórios. Esses métodos facilitam a edição de texto em seus arquivos e mostram quão útil o PowerShell pode ser para tarefas como esta.

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
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Artigo relacionado - PowerShell String