Tutti i metodi di sostituzione in PowerShell
-
Introduzione al metodo
replace()
in PowerShell -
Usare il metodo
replace()
in PowerShell - Rimozione di caratteri in PowerShell
- Sostituzione di più istanze in PowerShell
- Utilizzare l’operatore di sostituzione in PowerShell
- Rimozione di caratteri in PowerShell
- Sostituzione di più istanze in PowerShell
- Sostituzione di stringhe utilizzando Regex in PowerShell
- Escape dei caratteri Regex in PowerShell

Windows PowerShell può lavorare con testi e stringhe come molte altre lingue. Una di quelle caratteristiche preziose è utilizzare Windows PowerShell per sostituire caratteri, stringhe o anche testo all’interno di file.
Questo articolo discuterà la sostituzione o la cancellazione di caratteri, testi e parole utilizzando diversi metodi di sostituzione di PowerShell.
Introduzione al metodo replace()
in PowerShell
Possiamo utilizzare Windows PowerShell per sostituire caratteri nelle stringhe. Ad esempio, creiamo una variabile di PowerShell con un tipo di dato stringa che utilizzeremo nel corso di questo articolo.
$string = 'hello, world'
Vogliamo sostituire la parola hello
all’interno della stringa con la parola hi
per fare in modo che la variabile $string
abbia un valore di hi, world
.
Per eseguire ciò, Windows PowerShell deve capire dove trovare la parte specifica del testo, e una volta trovata, sostituisce quella porzione di testo con un valore fornito dall’utente.
Usare il metodo replace()
in PowerShell
Uno dei modi più convenienti per sostituire stringhe in Windows PowerShell è utilizzare il metodo replace()
. Il metodo replace()
accetta due argomenti.
- La stringa da trovare.
- La stringa da sostituire con il testo trovato.
Come possiamo vedere qui sotto, Windows PowerShell individua la parola hello
e la sostituisce con la stringa hi
. Il metodo restituisce il risultato finale, hi, world
.
Utilizziamo la nostra variabile $string
creata in precedenza come esempio.
Codice:
$string.replace('hello', 'hi')
Output:
hi, world
Possiamo invocare il metodo replace()
su qualsiasi carattere per sostituire qualsiasi stringa letterale con un’altra. Il metodo replace()
non restituisce nulla se la stringa da sostituire non viene trovata.
Inoltre, non abbiamo bisogno di assegnare una stringa a una variabile per sostituire il testo in una stringa. Possiamo invece chiamare direttamente il metodo replace()
sulla stringa.
Codice:
'hello world'.replace('hello', 'hi')
Rimozione di caratteri in PowerShell
Forse abbiamo bisogno di rimuovere caratteri in un testo da un’altra stringa piuttosto che sostituirli con qualcos’altro. Possiamo farlo specificando anche una stringa vuota.
Codice:
$string.replace('hello', '')
Output:
, world
Sostituzione di più istanze in PowerShell
Poiché il metodo replace()
restituisce un valore con un tipo di dato stringa, per sostituire un’altra istanza, possiamo concatenare e aggiungere un’altra chiamata al metodo replace()
alla fine. Windows PowerShell quindi invoca il metodo replace()
sull’output reale.
Codice:
$string.replace('hello', '').replace('world', 'earth')
Output:
, earth
Possiamo concatenare insieme quante più chiamate al metodo replace()
siano necessarie, ma dovremmo considerare di utilizzare l’operatore di sostituzione se abbiamo più stringhe da sostituire.
Utilizzare l’operatore di sostituzione in PowerShell
Possiamo anche utilizzare l’operatore di sostituzione di Windows PowerShell per sostituire un testo. L’operatore di sostituzione è simile al metodo a cui forniamo una stringa da trovare e sostituire.
Tuttavia, ha un vantaggio significativo: utilizza espressioni regolari (regex) per trovare stringhe corrispondenti. Utilizzando l’esempio precedente, possiamo usare l’operatore di sostituzione per sostituire hello
con hi
in modo simile, come mostrato qui sotto.
Codice:
$string -replace 'hello', 'hi'
Output:
hi, world
Rimozione di caratteri in PowerShell
Come per il metodo replace()
, possiamo anche eliminare caratteri da una stringa utilizzando l’operatore di sostituzione. A differenza del metodo replace()
, possiamo escludere completamente la stringa come argomento da sostituire, e scoprirai lo stesso effetto.
Codice:
$string -replace 'hello', ''
$string -replace 'hello'
Output:
, world
, world
Sostituzione di più istanze in PowerShell
Possiamo anche concatenare insieme gli utilizzi dell’operatore di sostituzione.
Codice:
$string -replace 'hello', 'hi' -replace 'world', 'earth'
Output:
hi, earth
Sostituzione di stringhe utilizzando Regex in PowerShell
Sostituire stringhe in PowerShell con il replace()
è limitato. Siamo costretti a utilizzare solo stringhe letterali.
Non possiamo usare caratteri jolly o regex. Se stai eseguendo operazioni intermedie o avanzate, dovremmo usare l’operatore di sostituzione.
Abbiamo uno script contenente una stringa creata con una variabile. Vogliamo cambiare la stringa in goodbye, world
indipendentemente dal valore.
Ci aiuterebbe a trasformare hello, world
e hi, world
in goodbye, world
. Dobbiamo utilizzare un’espressione regolare e corrispondere a qualsiasi specifico modello nel testo con regex per far sì che ciò accada.
In questo esempio, possiamo usare l’espressione hello|hi
per corrispondere entrambe le stringhe richieste utilizzando l’operatore regex "o"
oppure il carattere pipe (|
).
Codice:
'hello, world' -replace 'hello|hi', 'goodbye'
'hi, world' -replace 'hello|hi', 'goodbye'
Output:
goodbye, world
goodbye, world
Una volta che impariamo a maneggiare le regex per trovare stringhe, possiamo utilizzare PowerShell per sostituire stringhe jolly che corrispondono a qualsiasi modello.
Escape dei caratteri Regex in PowerShell
Nell’esempio regex sopra, la stringa da cercare non conteneva caratteri speciali regex. Tuttavia, il linguaggio delle espressioni regolari ha determinati caratteri che utilizza che non vengono interpretati letteralmente come la maggior parte delle lettere e dei numeri.
Ad esempio, potrebbe essere necessario sostituire del testo in una stringa. Quella stringa contiene un paio di caratteri speciali regex come una parentesi e un punto interrogativo.
Poi cerchiamo di sostituire la stringa [hello]
con un goodbye
.
Codice:
PS> '[hello], world' -replace '[hello]', 'goodbye'
Output:
[goodbyegoodbyegoodbyegoodbyegoodbye], wgoodbyergoodbyed
Non è quello che intendevamo. Questo scenario si verifica quando usiamo caratteri speciali regex all’interno della stringa da trovare ([hello]
).
Per evitare questo problema, possiamo o eseguire l’escape di questi caratteri speciali precedendo un backslash all’inizio di ciascun carattere o utilizzare il metodo Escape()
. Qui sotto possiamo vedere l’effetto di eseguire l’escape di ciascun carattere speciale con un backslash.
Codice:
'[hello], world' -replace '\[hello\]', 'goodbye'
Output:
goodbye, world
In alternativa, possiamo utilizzare il metodo Escape()
del tipo regex per rimuovere automaticamente tutti i caratteri speciali.
Codice:
'[hello], world' -replace ([regex]::Escape('[hello]')), 'goodbye'
Output:
goodbye, world
Dovremmo utilizzare il metodo Escape()
perché eseguirà l’escape di tutti i caratteri speciali, e non dobbiamo ricordarli.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn