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