regex - PowerShell 在文件行为中查找和替换正则表达式
问题描述
我正在尝试使用 PowerShell 查找和替换连接字符串。这是正则表达式:https ://regex101.com/r/onyJZz/1找到我需要的东西。
我要修改的配置文件的内容是这样的:
<connectionStrings>
<add name="FrameworkEntities" connectionString="metadata=res://*/PortalEntities.csdl|res://*/PortalEntities.ssdl|res://*/PortalEntities.msl;provider=System.Data.SqlClient;
provider connection string="data source=someservername.domain.co;initial catalog=Portal;persist security info=True;user
id=user;password=user$ecurity;MultipleActiveResultSets=True;App=EntityFramework;" providerName="System.Data.EntityClient" />
</connectionStrings>
基本上需要替换连接字符串的整个值。这是我正在做的事情的要点
$regex = '(?<=\bconnectionString=")[^"]*'
$dbname = 'newserver.domain.co'
$user = 'sa'
$password = 'password2'
$catalog = 'Portal'
$frameworkdbpath = 'c:\folder\db.config'
$finalString = "metadata=res://*/PortalEntities.csdl|res://*/PortalEntities.ssdl|res://*/PortalEntities.msl;provider=System.Data.SqlClient;provider connection string="data source=$dbname;initial catalog=$catalog;persist security info=True;user id=$user;password=$password;MultipleActiveResultSets=True;App=EntityFramework;"
(Get-Content $frameworkdbpath) | ForEach-Object {
$_ -replace $regex, $finalString
} | Set-Content $frameworkdbpath
运行上述代码时,替换仅适用于第一个分号。其余的字符串仍然存在,我不知道为什么。
解决方案
您的连接字符串包含多行。Get-Content
将内容作为行数组返回,每行单独处理。因此,您的连接字符串的第二行和第三行与您的表达式不匹配。
糟糕的解决方案:在应用正则表达式之前将文件读入单个字符串。您也可以删除ForEach-Object
.
(Get-Content $frameworkdbpath -Raw) -replace $regex, $finalString |
Set-Content $frameworkdbpath
好的解决方案:您的输入数据是 XML,因此应该这样处理。
[xml]$xml = Get-Content $frameworkdbpath
$node = $xml.SelectSingleNode('/connectionStrings/add')
$node.connectionString = $finalString
$xml.Save($frameworkdbpath)
推荐阅读
- ruby-on-rails - Rails 表单在同一参数上混合复选框和单选按钮
- github - 在 Linux 存储库上通过 WSL 使 GitHub Desktop 工作
- html - 如何将网页设置为自动主页
- git - 在 Git pre-commit 钩子中,临时删除所有不会提交的更改
- javascript - React JS 无法在 jsx 元素中显示 firebase 数据
- reactjs - 当测试的操作返回对 fetch 的调用时,Jest 测试抛出“无法读取未定义的属性‘原型’”
- css - 如何四舍五入导航栏中当前选项卡上方和下方的选项卡,除了当前选项卡外,还隐藏导航栏
- c# - 为什么这个继承会抛出堆栈溢出异常?
- javascript - 当 url 不使用 / 时如何使用 url 字符串参数
- excel - Excel 中带有公式的动态表