![正则表达式到 Cisco 接口](https://linux22.com/image/29007/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%88%B0%20Cisco%20%E6%8E%A5%E5%8F%A3.png)
我想知道是否有一些sed
,grep
或awk
正则表达式来解析 Cisco 接口部分并排除接口是否已关闭(关闭),如下例所示。
例子:
!
interface FastEthernet0/1
ip address 10.16.0.1 255.255.255.224
!
interface FastEthernet0/2
ip address 10.17.0.1 255.255.255.224
shutdown
!
我使用sed
下面的正则表达式来解析接口部分:
sed -n -e '/^interface/,/^!/p' file.txt
但是上面的正则表达式解析所有接口并且不排除接口。
答案1
awk
使用 GNU awk 或 mawk 你可以这样做:
awk -v RS='!\n' '!/shutdown/'
输出:
interface FastEthernet0/1
ip address 10.16.0.1 255.255.255.224
如果您只在第三行查找 shutdown,则可以使匹配更加精确:
awk -v RS='!\n' -v FS='\n +' '$3 !~ /shutdown/'
sed
当然也可以使用sed,但是比较复杂。
一种方法是您开始使用的方法,但在打印任何内容之前将整个记录收集在保留空间中。这适用于 GNU sed:
sed -n '/^interface/,/^!/ H; 1b; /^!/ { z; x; s/^\n//g; /shutdown/!p }'