没有任何配置的 grep cisco 接口

grep cisco interfaces without any configuration

这是 Cisco 交换机配置文件的示例。如果接口没有被使用,它应该处于 shutdown 模式。

config.txt

!
interface GigabitEthernet0/0
 shutdown
!
interface GigabitEthernet0/1
!
interface GigabitEthernet0/2
 shutdown
!
interface GigabitEthernet0/3 
!

因此,我想在没有任何配置且其中没有 shutdown 的情况下 grep 任何接口。

期望输出

!
interface GigabitEthernet0/1
!
!
interface GigabitEthernet0/3 
!

我可以做类似 grep interface.*[0-9] config.txt 的事情吗,它前后的行必须匹配 !

这是我的一些尝试,但其中 none 产生了我想要的输出。

grep interface.*[0-9] config.txt
grep -C1 interface.*[0-9] config.txt

如果有更好的解决方案grep,请告诉我。

我建议使用 GNU grep(或 pcregrep,如果您无法访问 GNU grep)解决方案:

grep -Poz '(?m)^!\R\Kinterface.*\R(?=!$)' file

参见online grep demo and the regex demo

详情

  • -Poz - P 使 PCRE 正则表达式引擎能够处理正则表达式,o 强制只输出匹配的文本,z 使 grep 能够使用跨换行符匹配的模式
  • (?m)^!\R\Kinterface.*\R(?=!$) 匹配:
    • (?m) - 使 ^ 匹配行首和 $ 匹配行尾的修饰符
    • ^ - 行首
    • ! - 一个 ! 字符
    • \R - 换行序列
    • \K - 匹配重置运算符,忽略当前匹配文本缓冲区中到目前为止匹配的所有文本
    • interface - 一句话
    • .* - 该行的其余部分
    • \R - 换行序列
    • (?=!$) - 一个积极的前瞻,确保有一个 ! 字符后跟行尾。