[英]Using Regex to replace multiple lines of text in file
基本上,我有一個要更新的 .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
選項傳遞給Get-Content
。
然后, .
默認情況下不匹配換行符,因此您需要使用(?s)
內聯 DOTALL(或“單行”)選項。
此外,如果您的動態內容包含類似$2
您可能會收到一個異常,因為這是對您的模式中缺少的組 2 的反向引用。 您需要通過將其中的每個$
加倍來處理替換字符串。
$temp = Get-Content C:\Temp\file.bas -Raw
$update = Get-Content C:\Temp\update -Raw
$regex = "(?s)<BEGINREPLACEMENT>.*?<ENDREPLACEMENT>"
$temp -replace $regex, $update.Replace('$', '$$')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.