【问题标题】:Select block text (line vty 0 4) using powershell/regex [duplicate]使用powershell / regex选择块文本(第vty 0 4行)[重复]
【发布时间】:2018-06-14 03:43:05
【问题描述】:

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

【问题讨论】:

  • 这当然可以在powershell中完成。您应该从Get-Content cmdlet 开始,然后在网络上搜索众多这样做的人之一。然后写一些代码,当你写的代码有具体问题时在这里问。

标签: regex powershell


【解决方案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多行。
使 ^ 和 $ 匹配每行的开始/结束(不仅是字符串的开始/结束)
s 修饰符: s单行。
点 匹配换行符

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

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

【讨论】:

  • 工作正常 +1,您可以省略 -Allmatches(因为它指的是一行上的所有匹配项),ForEach 也可以压缩为一个:|Foreach {$_.Matches.Value}positive look ahead 中的提示正则表达式可能会有所帮助。
  • @LotPings 感谢您的提示!我会玩一会儿,然后稍微编码一下。
猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 2013-03-03
  • 1970-01-01
  • 2015-12-25
  • 2011-07-31
  • 2011-07-09
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多