Usando PowerShell, voglio sostituire tutte le occorrenze esatte di [MYID]
in un dato file con MyValue
. Qual è il modo più semplice per farlo?
Utilizzo (versione V3):
(Get-Content c:\temp\test.txt).replace('[MYID]', 'MyValue') | Set-Content c:\temp\test.txt
O per la V2:
(Get-Content c:\temp\test.txt) -replace '\[MYID\]', 'MyValue' | Set-Content c:\temp\test.txt
(Get-Content file.txt) |
Foreach-Object {$_ -replace '\[MYID\]','MyValue'} |
Out-File file.txt
Notate che le parentesi intorno a (Get-Content file.txt)
sono necessarie:
Senza la parentesi il contenuto viene letto, una linea alla volta, e scorre lungo la pipeline fino a raggiungere out-file o set-content, che cerca di scrivere sullo stesso file, ma è già aperto da get-content e si ottiene un errore. La parentesi fa sì che l'operazione di lettura del contenuto venga eseguita una sola volta (aprire, leggere e chiudere). Solo allora, quando tutte le righe sono state lette, vengono convogliate una alla volta e quando raggiungono l'ultimo comando della pipeline possono essere scritte nel file. È la stessa cosa di $content=content; $content | dove ...