Я хочу найти строку в конфигурационном файле 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
, затем перейти к третьему из последнего символа и добавить новую строку?