Come sostituire un testo in un file usando PowerShell

  1. Usa Get-Content e Set-Content per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell
  2. Usa la Classe File per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell
  3. Sostituisci Ogni Occorrenza di una Stringa in Più File con PowerShell
  4. Conclusione
Come sostituire un testo in un file usando PowerShell

PowerShell è uno strumento potente per gestire file e cartelle. Ti consente di creare, copiare, eliminare, spostare, rinominare e visualizzare file e cartelle sul sistema.

Questo tutorial introdurrà diversi metodi per sostituire ogni occorrenza di una stringa in un file con PowerShell.

Usa Get-Content e Set-Content per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell

Il comando 'Get-Content' recupera il contenuto di un elemento nel percorso fornito, come il testo in un file. Il cmdlet 'Set-Content' è uno strumento di elaborazione delle stringhe che consente di aggiungere nuovo contenuto a un file o di sostituire contenuti esistenti.

Puoi utilizzare il cmdlet Get-Content e Set-Content per sostituire ogni occorrenza di una stringa in un file.

Sintassi:

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

Nella sintassi, sostituiamo 'OldString' con la stringa che vogliamo sostituire e 'NewString' con la stringa che vogliamo mettere al suo posto. Assicurati di sostituire 'Path\to\Your\File.txt' con il percorso effettivo del tuo file.

Facciamo un esempio. Abbiamo un file di testo (test.txt) nella directory (C:\New) con il seguente contenuto.

Get-Content C:\New\test.txt

Uscita:

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

Ora, sostituiamo ogni occorrenza della stringa 'Linux' con 'PowerShell' in un file test.txt con l’aiuto del parametro -Replace. Le parentesi () sono richieste attorno a Get-Content.

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

Quindi, visualizzare il contenuto di un file test.txt per verificare le modifiche.

Get-Content C:\New\test.txt

Come puoi vedere, Linux è stato sostituito con successo con PowerShell.

Uscita:

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

Questo metodo utilizza un array di stringhe per trovare e sostituire stringhe in un file perché il cmdlet Get-Content restituisce un array. È più facile sostituire stringhe se il Get-Content restituisce una singola stringa.

Possiamo utilizzare il parametro -Raw come mostrato di seguito. Il parametro -Raw è utilizzato per garantire che il contenuto di 'C:\New\test.txt' venga letto come una singola stringa, consentendo un’efficiente sostituzione di 'Linux' con 'PowerShell' in tutto il file.

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

In questo codice, leggiamo il contenuto di un file situato in 'C:\New\test.txt' come una singola stringa. Poi usiamo l’operatore -Replace per trovare e sostituire tutte le occorrenze di 'Linux' con 'PowerShell' all’interno di quella stringa.

Infine, salviamo il contenuto modificato di nuovo nello stesso file, aggiornandolo effettivamente con il nuovo testo. Questo codice è un modo diretto per eseguire sostituzioni di testo in un file utilizzando PowerShell.

Usa la Classe File per Sostituire Ogni Occorrenza di una Stringa in un File con PowerShell

La classe File fornisce metodi statici per operazioni comuni come creare, copiare, spostare, aprire, eliminare e aggiungere a un singolo file. Usa il metodo Replace() della classe File per sostituire i contenuti di un file specificato.

Sintassi:

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

Parametri:

  • "FilePath": Questo dovrebbe essere sostituito con il percorso effettivo del file.
  • "OldString": Questa è la stringa che desideri sostituire.
  • "NewString": Questa è la stringa con cui desideri sostituirla.

Il metodo ReadAllText() apre un file di testo, legge tutto il testo in quel file e poi chiude il file.

Il metodo WriteAllText() crea un nuovo file, scrive la stringa specifica nel file e chiude il file. Viene sovrascritto se il file di destinazione esiste già nella posizione.

Facciamo un esempio. Abbiamo un file di testo (python.txt) nella directory (C:\New) con il seguente contenuto.

Get-Content C:\New\python.txt

Uscita:

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

Ora, sostituiamo ogni occorrenza di una stringa in un file utilizzando il metodo della classe File.

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

Nel codice sopra, iniziamo creando una variabile chiamata $string, che memorizzerà il contenuto modificato del file 'C:\New\python.txt' dopo aver eseguito la sostituzione di testo. Utilizzando [System.IO.File]::ReadAllText("C:\New\python.txt"), leggiamo il contenuto dell’intero file e lo salviamo in $string.

Nel passo successivo, utilizziamo il metodo Replace() per localizzare tutte le istanze di "Python" all’interno del contenuto e sostituirle con "JavaScript", aggiornando efficacemente il testo. Infine, utilizziamo [System.IO.File]::WriteAllText("C:\New\python.txt", $string) per scrivere il contenuto modificato di nuovo nello stesso file, sovrascrivendo il testo originale e preservando le nostre modifiche.

Verifica le modifiche apportate in C:\New\python.txt.

Get-Content C:\New\python.txt

Uscita:

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

Nell’uscita, possiamo vedere che "Python" è stato sostituito con la parola "JavaScript".

Sostituisci Ogni Occorrenza di una Stringa in Più File con PowerShell

I metodi sopra sostituiscono una stringa in un file singolo. A volte, potrebbe essere necessario sostituire la stessa stringa in più file.

In tal caso, puoi usare il comando qui sotto per sostituire ogni occorrenza di una stringa specificata in più file.

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

Nel codice sopra, iniziamo utilizzando Get-ChildItem per raccogliere un elenco di file '.txt' nella directory 'C:\New'. L’asterisco * carattere jolly specifica tutti i file con l’estensione del nome file .txt.

Poi cicliamo attraverso ogni file, leggiamo il suo contenuto con Get-Content e applichiamo un’operazione di sostituzione, cambiando 'weekly' in 'monthly', usando l’operatore -Replace. Il contenuto modificato viene quindi scritto di nuovo nello stesso file con Set-Content.

Questo processo si ripete per ogni file nella directory, sostituendo in modo efficiente 'weekly' con 'monthly' in più file.

Possiamo anche usare il parametro -Recurse per sostituire una stringa in file nella directory specificata e nelle sue sottodirectory.

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

In questo codice, iniziamo utilizzando Get-ChildItem per assemblare un elenco di file '.txt' all’interno di 'C:\New' e delle sue sottodirectory. L’opzione -Recurse assicura che cerchiamo questi file non solo nella directory specificata ma anche nelle sue sottodirectory.

Poi utilizziamo un paio di loop ForEach per accedere al contenuto di ciascun file. All’interno del loop interno, utilizziamo l’operatore -Replace per sostituire 'weekly' con 'monthly' nel testo.

Infine, salviamo il contenuto modificato di nuovo nello stesso file. Questo processo viene eseguito su tutti i file in 'C:\New' e nelle sue sottodirectory, permettendoci di sostituire efficacemente 'weekly' con 'monthly' in numerosi file e directory nidificate.

Conclusione

In questo articolo, abbiamo esaminato diversi modi per sostituire stringhe in un singolo file utilizzando i cmdlet Get-Content e Set-Content, offrendo sia un metodo base che un metodo più efficiente con il parametro -Raw. Successivamente, abbiamo sfruttato la potenza della classe File per sostituire testo all’interno dei file, dimostrando una tecnica più avanzata.

Inoltre, abbiamo ampliato le nostre conoscenze sostituendo testo in più file in una directory e nelle sue sottodirectory. Questi metodi rendono facile per le persone modificare il testo nei propri file e mostrano quanto possa essere utile PowerShell per compiti come questo.

Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
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

Articolo correlato - PowerShell String