行匹配Stringpart->在行的最后三个字符之前插入字符串

时间:2019-09-23 17:38:12

标签: javascript powershell thunderbird

我想在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,然后从最后一个字符跳至第三行并添加新的字符串?

0 个答案:

没有答案