我有一个 pacfile,我正在尝试更新它并且需要删除两个字符串之间的内容;应保留字符串本身:
// 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
最佳答案
$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'
-replace $regex, '$1$2'
将正则表达式匹配的内容替换为其中第一个( $1
)和第二个捕获组( $2
)(带括号的子表达式, (...)
)匹配的内容。在这里,这些捕获组捕获包含感兴趣范围的字符串。
(?ms)
为正则表达式设置 m 多行和 s 单行选项:m
意味着 ^
和 $
应该匹配每行的开头和结尾,而不是整个输入字符串。 s
意味着元字符 .
也应该匹配 \n
字符,这样像 .*
这样的表达式可以用于跨行匹配。 \r?\n
匹配单个换行符,包括 CRLF 和 LF 变体。 .*?
匹配要删除的部分;请注意 ?
之后的非贪婪修饰符 ( .*
),它确保匹配结束字符串的下一次出现。 关于powershell - 删除两行之间的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44950054/