Utilizando PowerShell, eu quero substituir todas as ocorrências exatas de [MYID]
em um determinado arquivo por MeuValor
. Qual é a maneira mais fácil de fazer isso?
Utilização (versão V3):
(Get-Content c:\temp\test.txt).replace('[MYID]', 'MyValue') | Set-Content c:\temp\test.txt
Ou para a 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
Note os parênteses em torno de (Get-Content file.txt)
é necessário:
Sem o parêntese o conteúdo é lido, uma linha de cada vez, e flui pelo pipeline até chegar ao out-file ou set-content, que tenta escrever no mesmo arquivo, mas ele's já abre por get-content e você recebe um erro. O parêntese faz com que a operação de leitura de conteúdo seja realizada uma vez (abrir, ler e fechar). Somente então, quando todas as linhas tiverem sido lidas, elas são encapsuladas uma de cada vez e quando alcançarem o último comando no pipeline elas podem ser escritas no arquivo. It'é o mesmo que $content=content; $content | onde ...