2017-07-06 86 views
3

我有一個pacfile,我試圖更新並需要刪除兩個字符串之間的內容;字符串本身應保持:刪除2行之間的內容

// OFFICE 365 DIRECT ACCESS 

// END OFFICE 365 DIRECT ACCESS 

例如:

// OFFICE 365 DIRECT ACCESS 
    if (isInNet(hostip, "23.103.132.0","255.255.252.0") || //EOP 
    isInNet(hostip, "23.103.136.0","255.255.248.0") || //EOP 
    isInNet(hostip, "23.103.144.0","255.255.240.0") || //EOP 
    isInNet(hostip, "23.103.191.0","255.255.255.0") || //EOP 
// END OFFICE 365 DIRECT ACCESS 

我想刪除的頂部和底部線之間的線

$Pacfile = Get-ChildItem .\o365.pac | Get-Content -Raw 
$startstring= " \/\/ OFFICE 365 DIRECT ACCESS(.*?)\/\/END OFFICE 365 DIRECT ACCESS" 
$NewPacfile = [regex]::match($Pacfile, $startstring).Groups[1].value 
$NewPacfile 
+2

你可以做一個替換。將start * end替換爲startend。 –

回答

3
[email protected]' 
(?ms)^(\s*// OFFICE 365 DIRECT ACCESS\s*?\r?\n).*?\r?\n(\s*// END OFFICE 365 DIRECT ACCESS\s*) 
'@ 
(Get-Content -Raw .\o365.pac) -replace $regex, '$1$2' 
  • -replace $regex, '$1$2'取代什麼用正則表達式是什麼1日($1)和第二捕捉組($2)內的匹配它(對子表達式,(...))相匹配。
    這裏,這些捕獲組捕獲包含感興趣範圍的字符串。

  • (?ms)集兩者 ULTI線和S爲正則表達式英格爾行選項:

    • m意味着^$應該相互匹配行的開始和結束而不是整個輸入字符串。
    • s意味着元字符.應匹配\n字符太,使得諸如.*一個表達式可以用於匹配跨行
  • \r?\n匹配一個換行符,CRLF和LF變種。

  • .*?將該零件匹配到刪除;請注意遵循.*之後的非貪婪修飾符(?),這可確保下一個匹配結束字符串。

相關問題