删除两行之间的内容

Alf*_*man 4 powershell

我有一个 pacfile,我正在尝试更新它并且需要删除两个字符串之间的内容;应保留字符串本身:

 // OFFICE 365 DIRECT ACCESS
Run Code Online (Sandbox Code Playgroud)

和

// END OFFICE 365 DIRECT ACCESS
Run Code Online (Sandbox Code Playgroud)

例子:

// 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
Run Code Online (Sandbox Code Playgroud)

我想删除顶线和底线之间的线

$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
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 5

$regex=@'
(?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'
Run Code Online (Sandbox Code Playgroud)
  • -replace $regex, '$1$2'将正则表达式匹配的内容替换为它内部的第一个 ( $1) 和第二个捕获组 ( $2) (带括号的子表达式,(...))匹配的内容。
    在这里,这些捕获组捕获包含感兴趣范围的字符串。

  • (?ms)集两者米ULTI线和小号英格尔行选项为正则表达式:

    • m意味着^并且$应该匹配每一行的开始和结束,而不是整个输入字符串。
    • s装置,其元字符.应匹配\n字符太,使得这样的表达式.*可以用于匹配跨线。
  • \r?\n 匹配单个换行符,包括 CRLF 和 LF 变体。

  • .*?匹配要删除的部分;注意?后面的非贪婪修饰符 ( ) .*,它确保匹配结束字符串的下一次出现。