我想知道是否有一些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 }'