Estou escrevendo um script para personalizar um arquivo de configuração. Quero substituir várias instâncias de strings neste arquivo e tentei usar o PowerShell para fazer o trabalho.
Ele funciona bem para uma única substituição, mas fazer várias substituições é muito lento porque a cada vez é necessário analisar o arquivo inteiro novamente, e esse arquivo é muito grande. O script é semelhante a este:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1new'
} | Set-Content $destination_file
Eu quero algo assim, mas não sei como escrever:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1aa'
$_ -replace 'something2', 'something2bb'
$_ -replace 'something3', 'something3cc'
$_ -replace 'something4', 'something4dd'
$_ -replace 'something5', 'something5dsf'
$_ -replace 'something6', 'something6dfsfds'
} | Set-Content $destination_file
powershell
replace
Ivo Bosticky
fonte
fonte
$c = Get-Content $original_file; $c | ... | Set-Content $original_file
.Para fazer a postagem de George Howarth funcionar corretamente com mais de uma substituição, você precisa remover a quebra, atribuir a saída a uma variável (linha $) e, em seguida, gerar a variável:
fonte
Com a versão 3 do PowerShell, você pode encadear as chamadas de substituição:
fonte
Supondo que você só possa ter um
'something1'
ou'something2'
, etc. por linha, você pode usar uma tabela de pesquisa:Se você pode ter mais de um desses, apenas remova o
break
naif
instrução.fonte
Uma terceira opção, para um one-liner com pipeline, é aninhar os -replaces:
E:
Isso preserva a ordem de execução, é fácil de ler e se encaixa perfeitamente em um pipeline. Eu prefiro usar parênteses para controle explícito, autodocumentação, etc. Funciona sem eles, mas até que ponto você confia nisso?
-Replace é um operador de comparação, que aceita um objeto e retorna um objeto supostamente modificado. É por isso que você pode empilhá-los ou aninhá-los conforme mostrado acima.
Por favor, veja:
fonte