首页 > 解决方案 > 使用 powershell/regex 选择块文本(第 vty 0 4 行)

问题描述

line vty 0 4我需要一个可以从 cisco 配置文本文件中提取该部分的脚本。任何人都可以推荐一种使用 powershell/regex 的方法吗?

例如:我需要将以下块测试拉出并输出到文件,或者只是屏幕输出。

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

标签: regexpowershell

解决方案


如果文件在当前路径中命名为“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多行。
使 ^ 和 $ 匹配每行的开始/结束(不仅是字符串的开始/结束)
s 修饰符: s单行。
点匹配换行符

因此,.*它将匹配任何内容,直到正向超前 (?=^\w)检测到新行后跟一个单词字符。

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


推荐阅读