Пишу скрипт для настройки файла конфигурации. Я хочу заменить несколько экземпляров строк в этом файле, и я попытался использовать PowerShell для выполнения этой работы.
Он отлично работает для одной замены, но выполнение нескольких замен очень медленно, потому что каждый раз ему приходится снова анализировать весь файл, а этот файл очень большой. Скрипт выглядит так:
$original_file = 'path\filename.abc'
$destination_file = 'path\filename.abc.new'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'something1', 'something1new'
} | Set-Content $destination_file
Я хочу что-то подобное, но не знаю, как это написать:
$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
Иво Бостики
источник
источник
$c = Get-Content $original_file; $c | ... | Set-Content $original_file
.Чтобы сообщение Джорджа Ховарта правильно работало с более чем одной заменой, вам нужно удалить разрыв, назначить вывод переменной ($ line), а затем вывести переменную:
источник
В версии 3 PowerShell вы можете связать вызовы замены вместе:
источник
Предполагая, что у вас может быть только одно
'something1'
или'something2'
и т. Д. В строке, вы можете использовать таблицу поиска:Если у вас может быть несколько из них, просто удалите
break
вif
инструкции.источник
Третий вариант для конвейерного однострочника - вложить -replaces:
И:
Это сохраняет порядок выполнения, легко читается и аккуратно вписывается в конвейер. Я предпочитаю использовать круглые скобки для явного контроля, самодокументирования и т.д. Он работает и без них, но насколько вы этому доверяете?
-Replace - это оператор сравнения, который принимает объект и возвращает предположительно измененный объект. Вот почему вы можете складывать или вкладывать их, как показано выше.
Посмотри пожалуйста:
источник