2015-03-02 47 views
1

我有一個PowerShell的紙條test.ps1:正則表達式的PowerShell腳本刪除DEBUG標記

#if DEBUG 
Write-Output "LOG 1" 
#endif 
Write-Output "LOG 2" 
#if DEBUG 
Write-Output "LOG 3" 
#endif 
Write-Output "LOG 4" 

我想去掉DEBUG標籤與他們之間的代碼的方法。 我會得到這樣的:

Write-Output "LOG 2" 
Write-Output "LOG 4" 

我設法躺在這樣的:

$src = "C:\test.ps1" 
$out = "C:\test2.ps1" 
(Get-Content $src -Raw) -creplace "(?m)^(#if DEBUG)(?s).+(?m)^(#endif)","" | Set-Content -Encoding Default $out 

但是輸出,我只得到這樣的:

Write-Output "LOG 4" 

我想這是因爲該命令刪除所有在第一個標籤「#if DEBUG」和最後一個標籤「#endif」之間。不考慮其他標籤之間。

你能幫我嗎?

+0

爲什麼不只是使用預處理器? – Biffen 2015-03-02 15:37:43

+0

用'Write-Debug'代替'Write-Output',然後刪除'#if DEBUG'(簡單搜索和替換)。使您的腳本成爲高級功能,然後使用'-Debug'開關獲取您的調試輸出。 – alroc 2015-03-02 16:12:18

回答

0

改變你的正則表達式如下圖所示,如果必要的話

-creplace "(?m)^(?:#if DEBUG)[\s\S]+?\n#endif[\r\n]*","" 

轉義反斜線一次。

DEMO

+0

是的,非常感謝你! – Simplearetenir 2015-03-02 15:49:57

+0

http://stackoverflow.com/help/accepted-answer – 2015-03-02 15:51:25

相關問題