【发布时间】:2020-04-03 18:29:53
【问题描述】:
基本上,我有一个要更新的 .bas 文件。基本上脚本需要一些手动配置,我不希望我的团队每次运行时都需要重新配置脚本。我想做的是有这样的标签
<BEGINREPLACEMENT>
'MsgBox ("Loaded")
ReDim Preserve STIGArray(i - 1)
ReDim Preserve SVID(i - 1)
STIGArray = RemoveDupes(STIGArray)
SVID = RemoveDupes(SVID)
<ENDREPLACEMENT>
我对powershell有点熟悉,所以我想做的是创建一个更新文件并用更新替换标签之间的内容。我想做的是:
$temp = Get-Content C:\Temp\file.bas
$update = Get-Content C:\Temp\update
$regex = "<BEGINREPLACEMENT>(.*?)<ENDREPLACEMENT>"
$temp -replace $regex, $update
$temp | Out-File C:\Temp\file.bas
问题在于它没有替换文本块。我可以让它替换其中的任何一个,但我不能让它拉入两者之间的所有内容。
有人对我如何做到这一点有任何想法吗?
【问题讨论】:
-
读取文件时需要使用
-Raw和"(?s)<BEGINREPLACEMENT>.*?<ENDREPLACEMENT>"正则表达式。另外,在动态替换中使用逃生美元$temp -replace $regex, $update.Replace('$', '$$') -
是的,就是这样(以 -Raw 形式读取并更新正则表达式)!我不确定为什么正则表达式需要有所不同,尽管我没有在两个标签之间寻找任何东西?
-
.默认不匹配换行符。 -
知道了。好吧,这完全解决了我的问题。非常感谢!
标签: regex windows powershell scripting