regex - 在两个变量之间提取多行
问题描述
我被困在一个代码中,我的要求是获取两个字符串(变量)之间的行,请建议一个正则表达式模式
输入:
Device Name: test
Status: Completed
Results:
[PUSH_TERMLET] Action completed successfully...
Pushing configuration file 'PUSH_TERMLET' for IDX 60504 with mechanism SSH
****** Enable Mode Results ******
sh run | sec ip access-list standard customer_internal
ip access-list standard customer_internal
permit 204.79.49.116
permit 159.12.130.0 0.0.0.31
permit 10.108.30.0 0.0.0.255
permit 10.108.141.0 0.0.0.127
permit 10.108.172.0 0.0.0.255
permit 10.108.160.0 0.0.0.31
test#
输出:
permit 204.79.49.116
permit 159.12.130.0 0.0.0.31
permit 10.108.30.0 0.0.0.255
permit 10.108.141.0 0.0.0.127
permit 10.108.172.0 0.0.0.255
permit 10.108.160.0 0.0.0.31
这是我正在尝试的代码
$content = Get-Content -Path "TestACL.txt"
$device_list = $content | Select-String -Pattern "device name" -AllMatches
foreach($temp in $device_list) {
$temp.sp
$pattern = "(?<=$temp|permit)(.*)"
$content | Select-String -Pattern $pattern
}
除此之外,我还尝试了其他模式,但它们都不适合我。
解决方案
你的正则表达式有点接近。让我们探索这个选项。
$Content = (Get-Content "C:\temp\TestACL.txt") -join ' '
$variable = "test#"
$Output = ($Content | Select-String -Pattern "(?:permit )(.*)(?= $($variable))").Matches.Value
(?:permit )
将找到permit
包含空格的单词,并且?:
将其包含在匹配中。
(?= test#)
将查找单词test#
,包含空格,并且?=
将匹配但将其从主表达式之后的结果中排除。
将(.*)
捕获第一个和最后一个标准之间的任何内容
推荐阅读
- java - 使用 JAXRS 和 Jersey 进行基本身份验证
- python - 在python中使用numpy将图像逐渐转换为灰度
- c# - 如何获取 DataGrid 中选定行的集合?MVVM WPF
- javascript - 无法在 messenger.com 上的消息字段中插入文本
- javascript - jquery - 获取最近元素的ID?
- c++ - 是否有可能使模板函数成为一堆类似类的朋友?
- python - Python Google Cloud Function 中的 Paho-MQTT 连接失败
- entity-framework - 错误后如何重置实体框架数据上下文
- mongodb - 在数据库上构建社交网络:图与关系......还是两者兼而有之?
- python - django 上的 Tf 异议检测 API 部署