加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

多列正则表达式匹配配置块

发布时间:2020-12-14 06:28:42 所属栏目:百科 来源:网络整理
导读:我有一些问题试图匹配某个配置块(多个)从一个文件.下面是我要从配置文件中提取的块: ap71xx 00-01-23-45-67-89 use profile PROFILE use rf-domain DOMAIN hostname ACCESSPOINT area inside! 这样就有多个,每个都有不同的MAC地址.如何匹配多个行的配置块?
我有一些问题试图匹配某个配置块(多个)从一个文件.下面是我要从配置文件中提取的块:
ap71xx 00-01-23-45-67-89
 use profile PROFILE
 use rf-domain DOMAIN
 hostname ACCESSPOINT
 area inside
!

这样就有多个,每个都有不同的MAC地址.如何匹配多个行的配置块?

您可能遇到的第一个问题是,为了匹配多行,您需要将文件的内容作为单个字符串而不是单独的行来处理.例如,如果您使用Get-Content读取文件的内容,那么默认情况下,它将为您提供一个字符串数组 – 每一行都有一个元素.要跨线路匹配,您需要在单个字符串中的文件(并希望文件不是太大).你可以这样做:
$fileContent = [io.file]::ReadAllText("C:file.txt")

或者在PowerShell 3.0中,您可以使用-Raw参数的Get-Content:

$fileContent = Get-Content c:file.txt -Raw

那么你需要指定一个正则表达式选项来匹配跨终止符,即

> SingleLine模式(.匹配包括换行符在内的任何字符),以及
>多行模式(^和$匹配嵌入式行终止符),例如
>(?smi) – 注意“我”是忽略大小写

例如.:

C:&; $fileContent | Select-String '(?smi)([0-9a-f]{2}(-|s*$)){6}.*?!' -AllMatches |
        Foreach {$_.Matches} | Foreach {$_.Value}

00-01-23-45-67-89
 use profile PROFILE
 use rf-domain DOMAIN
 hostname ACCESSPOINT
 area inside
!
00-01-23-45-67-89
 use profile PROFILE
 use rf-domain DOMAIN
 hostname ACCESSPOINT
 area inside
!

使用Select-String cmdlet进行搜索,因为您可以指定-AllMatches,它将输出所有匹配,而-match操作符在第一次匹配之后停止.有意义,因为它是一个布尔运算符,只需要确定是否有匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读