多列正则表达式匹配配置块
发布时间: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模式(.匹配包括换行符在内的任何字符),以及 例如.: 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操作符在第一次匹配之后停止.有意义,因为它是一个布尔运算符,只需要确定是否有匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |