regex - 替换ini文件中的块文本
问题描述
我需要替换 .ini 文件中的块文本。我的脚本是:
$oFile = "$Env:ProgramFiles (x86)\Advanced Monitoring Agent\Settings.ini
$oSettings = Get-Content -Path $oFile
$oPattern = '[PATCHMANAGEMENT](.*?)[SITECONCENTRATOR]'
$oTextToReplace = [regex]::match($oSettings , $oPattern).Groups[1].Value
$oNewFile = $oSettings -replace $oTextToReplace.ToString, "][" | out-file -FilePath $Env:ProgramFiles
(x86)\Advanced Monitoring Agent\newSettings.ini
但它不起作用。你能帮我解决这个问题吗?对不起我的英语不好。问候!
解决方案
首先,您应该将文件作为单个变量读取:
$oSettings = Get-Content -Path $oFile -Raw
接下来,在模式开始处使用 DOTALL 或(?s)
内联修饰符来进行跨行.
匹配。此外,[
在字符类之外进行转义以使其与文字匹配[
,否则,它表示字符类开始。然后,附上您要保留的标签,而不是标签之间的文本:
$oPattern = '(?s)(\[PATCHMANAGEMENT]).*?(\[SITECONCENTRATOR])'
请参阅正则表达式演示(它是如何工作的)。
剩下的只是-replace
:
$oNewFile = $oSettings -replace $oPattern, '$1$2' |
out-file -FilePath "${Env:ProgramFiles(x86)}\Advanced Monitoring Agent\newSettings.ini"
推荐阅读
- php - 在 Wordpress 仪表板中隐藏评论作者的电子邮件
- docusignapi - 使用带有 REST API 的 HMAC 安全性验证 webhook 请求
- sql - 使用 Oracle 的 PL/SQL 函数中出现“无效指令”错误
- reactjs - 在 THREE.js 中计算纹理颜色通道的平均值
- php - GAE PHP 7 403 FORBIDDEN error while got URL to upload file
- javascript - 带有 fetch 的 Javascript 函数返回 null
- angular - 如何使用 MockStore 在 Angular 服务中测试 NgRx 调度操作
- android - Android Drawable Blur DropShadow
- php - Google 回调 url 返回在 Laravel Socialite 中找不到的页面
- php - Nova 排队操作