#powershell
#powershell
Вопрос:
У меня есть текстовый файл, который содержит следующее
php_configuration=up21
sql_configuration=up22
apache_configuration=up23
java_script=down
html=down
Я хочу заменить up21
, up22
и up23
на cat
, dog
и elephant
и сохранить оставшееся содержимое файла таким, какое оно есть.
Но когда я выполняю приведенный ниже сценарий powershell, он заменит строки, но не сохранит оставшееся содержимое текстового файла:
$a=Get-Content -Path C:UsersAdministratorDesktopPowloc.txt |Select-String -Pattern
"php_configuration"|ForEach-Object {$_ -Replace 'up21', 'cat'}
$b=Get-Content -Path C:UsersAdministratorDesktopPowloc.txt |Select-String -Pattern
"sql_configuration"|ForEach-Object {$_ -Replace 'up22', 'dog'}
$c=Get-Content -Path C:UsersAdministratorDesktopPowloc.txt |Select-String -Pattern
"apache_configuration"|ForEach-Object {$_ -Replace 'up23', 'elephant'}
$a, $b, $c| Set-Content -Path C:UsersAdministratorDesktopPowloc.txt
Комментарии:
1. Это потому
$a, $b, $c
, что вы вставляетеSet-Content
без остальной части текста. Вы пыталисьGet-Content
использовать весь файл и сохранить его в переменной, затем-Replace
эти строки и, наконецSet-Content
?
Ответ №1:
В принципе, вы можете сделать следующее:
(Get-Content 'C:UsersAdministratorDesktopPowloc.txt') | Foreach-Object {
$_ -replace 'up21', 'cat' `
-replace 'up22', 'dog' `
-replace 'up23', 'elephant'
} | Set-Content 'C:UsersAdministratorDesktopPowloc.txt'
Есть ли необходимость указывать «php_configuration» и т. Д.?
РЕДАКТИРОВАТЬ: Хорошо, после прочтения комментария @T-Me ниже я изменил ответ. Не самый красивый, но вот и все.
(Get-Content 'C:UsersAdministratorDesktopPowloc.txt') | Foreach-Object {
if($_ | Select-string -Pattern "php_configuration"){$_ -replace 'up21', 'cat'}
elseif($_ | Select-String -Pattern "sql_configuration"){$_ -replace 'up22', 'dog'}
elseif($_ | Select-String -Pattern "apache_configuration"){$_ -replace 'up23', 'elephant'}
else {$_}
} | Set-Content 'C:UsersAdministratorDesktopPowloc.txt'
Комментарии:
1. Я бы предположил, что
up
s являются переменными, и вы не хотите каждый раз менять сценарий. Таким образом, он может использоватьSelect-String -Pattern
для идентификации всей строки. Для захватаup
s ему понадобится регулярное выражение в-replace