【问题标题】:Recursive text search whithin lines before the grep match in shell在shell中grep匹配之前的递归文本搜索
【发布时间】:2015-10-28 15:00:24
【问题描述】:

我需要有关路由器配置备份数据库的帮助。我需要获取配置中没有vrfshutdown 的接口列表。 我得到了通过awk '/^interface/,/!/' 传递配置文件的所有接口配置的列表。这给了我下面的输出:

interface TenGigE0/3/0/0
 description 
 service-policy output QOS
 ipv4 mtu 1500
 ipv4 address 13.24.15.3 255.255.255.252
 carrier-delay up 3000 down 0
 load-interval 30
 dampening
!
interface TenGigE0/3/0/1
 description Link To 
!
interface TenGigE0/3/0/1.302
 description 
 vrf 1671
 ipv4 address 13.24.14.11 255.255.255.254
 encapsulation dot1q 302

现在,我试图排除包含vrf 行的接口。我试图做的是grep for vrf,当有匹配时,删除上面包含单词“interface”的行。不幸的是没有运气。也许有人有更复杂的解决方案。

【问题讨论】:

  • 请参阅this SO question/discussion,了解为什么 awk 范围表达式在一般情况下不是很有用,以及如何重写以避免它可以让您做更多有用的事情(例如,如果它符合某些其他条件,则删除一个部分就像你想在这里做的那样)。
  • @EtanReisner 谢谢。会看看。一般来说,我不拘泥于使用 awk,任何 shell 工具都可以使用。

标签: shell recursion awk grep


【解决方案1】:

如果你有结构化记录,awk 可以解决这个问题。给定你的中间文件

2$ awk 'BEGIN{RS=ORS="!\n"} !/vrf/' interface

将打印没有“vrf”的记录

interface TenGigE0/3/0/0
 description
 service-policy output QOS
 ipv4 mtu 1500
 ipv4 address 13.24.15.3 255.255.255.252
 carrier-delay up 3000 down 0
 load-interval 30
 dampening
!
interface TenGigE0/3/0/1
 description Link To
!

【讨论】:

  • 这很神奇:))谢谢。我花了很多时间试图找到一个解决方案,结果却是那么短:)))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2013-06-26
  • 1970-01-01
  • 2013-04-14
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多