使用powershell / regex选择块文本(行vty 0 4)

时间:2018-06-13 18:09:33

标签: regex powershell

我需要一个可以从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

1 个答案:

答案 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)设置ms修饰符

  

m修饰符: m ulti line   导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)
   s修饰符: s ingle line   点   匹配换行符

所以.*会匹配任何内容,直到positive lookahead (?=^\w)检测到新行后跟前面的单词字符。

请注意,省略了Select-String的-Allmatches开关,因为预计此类文件只包含一个line vty 0 4部分。