模式匹配/排除(awk/sed)

模式匹配/排除(awk/sed),awk,sed,Awk,Sed,我使用以下命令从配置文件检索所有接口,但不包括“无ip地址”或“关机”的接口 awk/^interface/,/\!/“文件| sed-E'/^interface/{:1;N;/\!/!b1;/(无ip地址|关机)/d} 既然在“ip地址”(或“关机”)上无法匹配,我又如何排除接口Vlan12(在本例中) 预期结果: interface Vlan1 ip address 192.168.0.1 255.255.255.0 ip flow ingress ! interface Vlan23

我使用以下命令从配置文件检索所有接口,但不包括“无ip地址”或“关机”的接口

awk/^interface/,/\!/“文件| sed-E'/^interface/{:1;N;/\!/!b1;/(无ip地址|关机)/d}

既然在“ip地址”(或“关机”)上无法匹配,我又如何排除接口Vlan12(在本例中)

预期结果:

interface Vlan1
 ip address 192.168.0.1 255.255.255.0
 ip flow ingress
!
interface Vlan23
 ip address 10.0.0.1 255.255.255.0
 ip flow ingress
 no ip redirects
!
试试这个:

sed ':a;/^interface /{N;/\n!$/!ba};/\n *ip address/!d;/shutdown/d' yourfile
写在更多行上的脚本是:

:要返回的标签a
/^interface/{#body of{}仅在以“interface”开头的行上执行
N#将下一行添加到图案空间
/\n!$/!ba#如果最后添加的行不仅仅是a!,请跳到:a
}#在此之前的所有行都像do-while循环
/\n*ip地址/!d#如果没有以“ip地址”开头的行,则删除多行
/关机/d#如果多行中出现“关机”,则删除多行
显然,您可以根据需要使每个正则表达式更简单或更复杂。

尝试以下方法:

sed ':a;/^interface /{N;/\n!$/!ba};/\n *ip address/!d;/shutdown/d' yourfile
写在更多行上的脚本是:

:要返回的标签a
/^interface/{#body of{}仅在以“interface”开头的行上执行
N#将下一行添加到图案空间
/\n!$/!ba#如果最后添加的行不仅仅是a!,请跳到:a
}#在此之前的所有行都像do-while循环
/\n*ip地址/!d#如果没有以“ip地址”开头的行,则删除多行
/关机/d#如果多行中出现“关机”,则删除多行

根据您的需要,您可以明显地使每个正则表达式更简单或更复杂。

您确定您不是在寻找类似
awk'NR==1{RS=ORS=“!”;next}/\n ip address/&&/shutdown/'file
?此处排除接口的规则是什么?是因为
接口Vlan12
被命名为
Vlan12
?谢谢@oguzismail-它工作起来很有魅力。我一直在学习新的东西…@Ryszard Czech:不,“规则”更多的是“因为缺少单词‘ip地址’-排除接口块”。你确定你不是在寻找类似
awk'NR==1{RS=ORS=“!”;next}/\n ip地址/&&/shutdown/'file
?此处排除接口的规则是什么?是因为
接口Vlan12
被命名为
Vlan12
?谢谢@oguzismail-它工作起来很有魅力。我一直在学习一些新的东西…@Ryszard Czech:不,“规则”更像是“因为缺少“ip地址”这个词-排除接口块”。