我需要一个可以从cisco配置文本文件中提取line vty 0 4
部分的脚本。任何人都可以使用powershell / regex推荐一种方法吗?
ex:我需要将以下块测试拉出并输出到文件,或者只是屏幕输出。
line con 0
exec-timeout 10 0
timeout login response 30
privilege level 1
special-character-bits 7
exec
line vty 0 4 >STARING AT THIS LINE
access-class VTY-ACL in
motd-banner
exec-banner
exec-timeout 10 0
timeout login response 30
privilege level 1
logging synchronous >ENDING AT THIS LINE
line vty 5 15
access-class VTY-ACL in
motd-banner
exec-banner
exec-timeout 10 0
timeout login response 30
privilege level 1
logging synchronous
答案 0 :(得分:1)
如果文件在当前路径中命名为“file.text”:
Get-Content .\file.text -Raw |Select-String '(?ms)^line vty 0 4.*(?=^\w)' |Foreach {$_.Matches.Value}
或使用别名对其进行高尔夫编码:
cat .\file.text -Raw|sls '(?ms)^line vty 0 4.*(?=^\w)'|%{$_.Matches.Value}
模式中的(?ms)
设置m
和s
修饰符
m修饰符: m ulti line 导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)
s修饰符: s ingle line 点 匹配换行符
所以.*
会匹配任何内容,直到positive lookahead (?=^\w)
检测到新行后跟前面的单词字符。
请注意,省略了Select-String的-Allmatches
开关,因为预计此类文件只包含一个line vty 0 4
部分。