Соответствие строки Stringpart -> Вставить строку перед последними тремя символами строки - PullRequest
2 голосов
/ 23 сентября 2019

Я хочу найти строку в конфигурационном файле JS и вставить строку перед последними тремя символами.

Давайте начнем с примера фрагмента (суммы аккаунтов меняются и их номера):

...
user_pref("mail.account.lastKey", 10);
user_pref("mail.accountmanager.accounts", "account1,account2,account14,account5");
user_pref("mail.accountmanager.defaultaccount", "account1");
...

Функция должна найти шаблон user_pref("mail.accountmanager.accounts".После шаблона следуют разные суммы счетов с неизвестными номерами, например: account1, account3, account10 или account1, account12, account13, account15

Моя цель - добавить account Строка с номером, например account74 в конце последней данной учетной записи.Единственное сходство всех разных конфигурационных файлов - это начало строки user_pref... и конец строки: ");.

Фон

Эта функция выполняет действие в PowerShell.скрипт для реализации "Prefs.js".

код

Моя функция выглядит примерно так:

$number        = 74
$FileName      = "C:\Path\to\prefs.js"
$MatchString   = '"mail.accountmanager.accounts",'
$ReplaceString = "`"\);"
$NewString     = ",account$number`");"

function AccountAppender {
    (Get-Content $FileName) | ForEach-Object {
        $_
        if ($_ -match $MatchString) {
            $_ -replace $ReplaceString, $NewString
        }
    } 
    | Set-Content $FileName
}

AccountAppender

Другие мысли с оператором замены:

$number                 = 74
$SearchContentAccount   = '"mail.accountmanager.accounts",'
$AddContentAccount      = @"
,account$number"); 
"@
$AccountStringRaw       = Get-Content -Path $Filename |
                          Select-String -Pattern $SearchContentAccount
$AccountStringLastChars = $AccountStringRaw.Substring($AccountStringRaw.Length -3)
$AccountStringReplacer  = $AccountStringLastChars.Replace('");',$AddContentAccount)

Ожидание и реальность

Моя текущая проблема заключается в том, что строка результата будет добавлена ​​в новую строку с новой "вставленной" строкой.Вместо этого я хочу заменить старую строку.

На данный момент я получил это:

...
user_pref("mail.accountmanager.accounts", "account1,account2");
user_pref("mail.accountmanager.accounts", "account1,account2,account74");
...

Я хочу получить такой результат:

...
user_pref("mail.accountmanager.accounts", "account1,account2,account74");
...

Вопрос:

Как правильно передать команды для замены целевой строки новой строкой, содержащей добавленную учетную запись?

Или в противном случае: есть ли опция (командаконвейер с заменой, вставкой, шаблоном или соответствием), чтобы найти строку с частью шаблона, получить полную строку как $PSItem, затем перейти к третьему из последнего символа и добавить новую строку?

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