簡體   English   中英

使用正則表達式替換文件中的多行文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM