首页 > 解决方案 > 替换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

但它不起作用。你能帮我解决这个问题吗?对不起我的英语不好。问候!

标签: regexpowershell

解决方案


首先,您应该将文件作为单个变量读取:

$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"

推荐阅读