Tutti i metodi di sostituzione in PowerShell

  1. Introduzione al metodo replace() in PowerShell
  2. Usare il metodo replace() in PowerShell
  3. Rimozione di caratteri in PowerShell
  4. Sostituzione di più istanze in PowerShell
  5. Utilizzare l’operatore di sostituzione in PowerShell
  6. Rimozione di caratteri in PowerShell
  7. Sostituzione di più istanze in PowerShell
  8. Sostituzione di stringhe utilizzando Regex in PowerShell
  9. Escape dei caratteri Regex in PowerShell
Tutti i metodi di sostituzione 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.

  1. La stringa da trovare.
  2. 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.

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