Добавить массив строк между двумя строками - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть файл конфигурации с текстом, подобным приведенному ниже:

 <Directory />
     Options -Indexes
 </Directory>

Необходимо заменить его, как показано ниже, с помощью powershell.

 <Directory />
     AllowOverride none
     Require all denied
 </Directory>

Я использовал код, указанный ниже:

 $HttpPath = "C:\Oracle\Middleware\Oracle_Home\user_projects\domains\my_domain\config\fmwconfig\components\OHS\ohs1\httpd.conf"
 $Lines = @("AllowOverride none", "", "Require all denied")
 $Pattern = '(?s)(?<=<Directory />\r?\n).*?(?=</Directory>)'
 $NewLine = "{0}{1}" -f "$Lines",[Environment]::NewLine
  (Get-Content $HttpPath -raw) -replace $Pattern,$NewLine | Set-Content $HttpPath

Но это не размещение элементов массива на отдельных строках, это объединение элементов в виде следующих:

 <Directory />
    AllowOverride none  Require all denied
 </Directory>

Нужно решение для размещения этих строк на отдельных строках.

1 Ответ

1 голос
/ 01 апреля 2020

Попробуйте вместо этого объединить элементы массива:

$HttpPath = "C:\Oracle\Middleware\Oracle_Home\user_projects\domains\my_domain\config\fmwconfig\components\OHS\ohs1\httpd.conf"
$Lines = @("AllowOverride none", "", "Require all denied")
$Pattern = '(?s)(?<=<Directory />\r?\n).*?(?=</Directory>)'
$NewLine = [string]::Join([Environment]::NewLine,$Lines)+[Environment]::NewLine
(Get-Content $HttpPath -raw) -replace $Pattern,$NewLine | Set-Content $HttpPath    

[string]::Join берет массив строк и "сшивает" их вместе, используя переданный символ og string.

Вы кодируете только вставки перевод строки после всех элементов.

...