2017-07-06 65 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变种。

  • .*?将该零件匹配到删除;请注意遵循.*之后的非贪婪修饰符(?),这可确保下一个匹配结束字符串。

相关问题