Как заменить слово в строке между двумя символами словом в Powershell? - PullRequest
0 голосов
/ 05 апреля 2019

Я пишу скрипт в Powershell для добавления переменных среды файла JSON в другую программу. Основная проблема, которая у меня есть, заключается в том, что мне нужно слово, которое находится между двумя символами, такими как:% hello%, и я хочу заменить его словом и другими символами. % Hello% должен быть $ Hello. И слово в строке пути, поэтому я не могу просто заменить строку ..

Я знаю функцию «заменить» или другие функции форматирования в PowerShell, но я понятия не имею, как найти найденное слово между двумя символами, чтобы заменить его тем же словом.

Это мой: config.json

{
  "DUMMY_INCLUDEPATH": "%DUMMY_HOME%\\src\\main\\include",
  "DUMMY_LIBRARYPATH": "%DUMMY_HOME%\\Test%Platform% 
}

это моя функция powershell:

function SetEnvVars {
    [string] $pathToConfig = "$($PSScriptRoot)\config.json",
    [string] $pathToIntermediateEnvFile = "$($PSScriptRoot)\envvarsSet.properties"

    $json = Get-Content "$($pathToConfig)" | ConvertFrom-Json
    $sw = [System.IO.StreamWriter] "$($pathToIntermediateEnvFile)"
    $json.psobject.Properties | ForEach-Object {
        [bool] $bEnvVarWasSet = EnvironmentSetOrIgnore $_.Name $_.Value
        if ($true -eq $bEnvVarWasSet) {

            $sw.WriteLine("env."+$_.Name+" = `""+$_.Value+"`"")
        }
    }
    $sw.close()
    Set-Item env:ERRORLEVEL 0
    return 0
}

вывод, который я получаю в моих "envvarsSet.properties", выглядит так:

env.DUMMY_INCLUDEPATH = "%DUMMY_HOME%\src\main\include"
env.DUMMY_LIBRARYPATH = "%DUMMY_HOME%\Test%Platform%"

но мне нужно:

env.DUMMY_INCLUDEPATH = "$DUMMY_HOME\src\main\include"
env.DUMMY_LIBRARYPATH = "$DUMMY_HOME\Test$Platform"

надеюсь на помощь! привет

1 Ответ

0 голосов
/ 05 апреля 2019

Быстрая и очень грязная замена, используя просто регулярное выражение:

(Get-Content -Path $path) -replace '(?m)%(.*?)%', '$$$1'

Если ваша цель состоит в том, чтобы в какой-то момент это интерпретировалось PowerShell или bash, я бы предложил использовать разделители переменных:

'$${$1}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...