SED

https://www.regextester.com/1946

G8 = P(G1,G3)
G9 = P(G3,G4)

LH

sort NH-3ND-R6506E-D-1Cfg  | uniq | sed 's/[0-9]*//g' | sort | uniq | sed '/^$/d' > /tmp/x
我初步看了一下共有162条语法规则(见附件'rule_lists.txt')。


$ egrep -i 'ip access-list extended' NH-3ND-R6506E-D-1Cfg  | wc -l
54 个

$ sort NH-3ND-R6506E-D-1Cfg  | uniq -c | awk '{ if ($1>1) { print $0 }}' | wc -l
634条一模一样的语句

$ sort NH-3ND-R6506E-D-1Cfg  | uniq | sed 's/[0-9]*//g' | sort | uniq | wc -l => 162条语法规则


一共是54个access-list,634条一模一样的语句
我的计划是分组进行转换,得先测试一下。




sed 's#ip access-list extended#acl advanced name#g' < NH-3ND-R6506E-D-1Cfg > v1
$ sed 's#any any#ANYDOUBLE ANYTDOUBLE#g' < v1 > v2
$ sed 's#any#ANYSINGLE#g' < v2 > v3
$ sed 's#ANYSINGLE$#destination any#g' < v3 > v4
$ sed 's#ANYSINGLE host#any destination#g' < v4 > v5
$ sed 's#deny   ip host#rule deny ip source#g' < v5 > v6
$ sed 's#deny   ip#rule deny ip source#g' < v6 > v7
$ sed 's#deny.*tcp#rule deny tcp source#g' < v7 > v8
$ sed 's#eq#eqSINGLE#g' < v8 > v9
$ sed '/eqSINGLE.........$/s#eqSINGLE#destination-port eq#g' < v9 > v10
$ sed '/eqSINGLE.......$/s#eqSINGLE#destination-port eq#g' < v10 > v11
$ sed '/eqSINGLE......$/s#eqSINGLE#destination-port eq#g' < v11 > v12
$ sed '/eqSINGLE.....$/s#eqSINGLE#destination-port eq#g' < v12 > v13
$ sed '/eqSINGLE....$/s#eqSINGLE#destination-port eq#g' < v13 > v14
$ sed '/eqSINGLE...$/s#eqSINGLE#destination-port eq#g' < v14 > v15
$ sed 's#ANYSINGLE eqSINGLE#any source-port eq destination#g' < v15 > v16
$ sed '/ftp-data/s#ANYSINGLE range#destination  any destination-port range#g' < v16 > v17
$ sed '/tcp/s#ANYSINGLE range#any source-port range destination#g' < v17 > v18
$ sed '/udp host/s#ANYSINGLE range#0 destination any destination-port range#g' < v18 > v19
$ sed '/udp/s#ANYSINGLE range#destination any destination-port range#g' < v19 > v20
$ sed 's#permit icmp host#rule permit icmp source#g' < v20 > v21
$ sed 's#ANYDOUBLE ANYTDOUBLE#any destination any#g' < v21 > v22

$ sed '/permit icmp source.*host/s#$# 0#g' < v22 > v23
$ sed '/permit icmp source.*host/s#host#0 destination#g' < v23 > v24
$ sed 's#^.permit icmp ANYSINGLE#rule permit icmp source any destination#g' < v24 > v25 
$ sed 's#^.permit icmp#rule permit icmp source#g' < v25 > v26
$ sed '/permit icmp source.*host/s#$# 0#g' < v26 > v27
$ sed '/permit icmp source.*host/s#host#destination#g' < v27 > v28

$ sed 's#permit ip ANYSINGLE#rule permit ip source any destination#g' < v28 > v29
$ sed 's#permit ip host#rule permit ip source#g' < v29 > v30
$ sed '/rule permit ip source.*host/s#$# 0#g' < v30 > v31
$ sed '/rule permit ip source.*host/s#host#0 destination#g' < v31 > v32
$ sed '/rule permit ip source.*destination.*any/s#destination any#0 destination any#g' < v32 > v33
$ sed '/permit ip any destination...../s#$# 0#g' < v33 > v34
$ sed '/^.permit ip.*host/s#$# 0#g' <  v34  > v35
$ sed '/^.permit ip.*host/s#host#destination#g' <   v35 > v36
$ sed '/^.permit ip/s#permit ip#rule permit ip source#g' < v36 > v37

# permit TCP
$ sed '/^.permit tcp any source.*host/s#$# 0#g' < v37 > v38
$ sed 's#^.permit tcp#rule permit tcp source#g' < v38 > v39
$ sed '/ANYSINGLE dest/s#ANYSINGLE#destination any#g' < v39 > v40
$ sed 's#rule permit tcp source ANYSINGLE#rule permit tcp source any destination#g' < v40 > v41

$ sed 's#rule permit tcp source host#rule permit tcp source#g' < v41 > v42
$ sed '/rule permit tcp source....*eqSINGLE.*host/s#host#destination#g' < v42 > v43
$ sed '/rule permit tcp source....*eqSINGLE.*destination/s#eqSINGLE#source-port eq#g' < v43 > v44
$ sed '/eqSINGLE www/s#eqSINGLE www#source-port eq www destination#g' < v44  > v45
$ sed '/eqSINGLE 9080/s#eqSINGLE 9080#source-port eq 9080 destination#g' < v45 > v46
$ sed '/eqSINGLE 443/s#eqSINGLE 443#source-port eq 443 destination#g' < v46 > v47
$ sed 's#eqSINGLE 8080#source-port eq 8080 destination#g' < v47 > v48

$ sed -i 's#eqSINGLE 4001#source-port eq 4001 destination#g' v48
$ sed -i 's#eqSINGLE 9200#source-port eq 9200 destination#g' v48 
$ sed -i 's#eqSINGLE 2005#source-port eq 2005 destination#g' v48 
$ sed -i 's#eqSINGLE 7080#source-port eq 7080 destination#g' v48 
$ sed -i 's#eqSINGLE 587#source-port eq 587 destination#g' v48 
$ sed -i 's#eqSINGLE 465#source-port eq 465 destination#g' v48 
$ sed -i 's#eqSINGLE 995#source-port eq 995 destination#g' v48 
$ sed -i 's#eqSINGLE 1500#source-port eq 1500 destination#g' v48 
$ sed -i 's#eqSINGLE 9588#source-port eq 9588 destination#g' v48
$ sed -i 's#eqSINGLE 9099#source-port eq 9099 destination#g' v48
$ sed -i 's#eqSINGLE 9090#source-port eq 9090 destination#g' v48
$ sed -i 's#eqSINGLE 8411#source-port eq 8411 destination#g' v48
$ sed -i 's#eqSINGLE 8180#source-port eq 8180 destination#g' v48
$ sed -i 's#eqSINGLE 3389#source-port eq 3389 destination#g' v48 
$ sed -i 's#eqSINGLE 9999#source-port eq 9999 destination#g' v48 
$ sed -i 's#eqSINGLE 9088#source-port eq 9088 destination#g' v48 
$ sed -i 's#eqSINGLE 7000#source-port eq 7000 destination#g' v48 
$ sed -i 's#eqSINGLE 8087#source-port eq 8087 destination#g' v48 
$ sed -i 's#eqSINGLE 8580#source-port eq 8580 destination#g' v48 
$ sed -i 's#eqSINGLE 9091#source-port eq 9091 destination#g' v48 
$ sed -i 's#eqSINGLE 8449#source-port eq 8449 destination#g' v48 
$ sed -i 's#eqSINGLE 6003#source-port eq 6003 destination#g' v48 
$ sed -i 's#eqSINGLE 9000#source-port eq 9000 destination#g' v48 
$ sed -i 's#eqSINGLE 1198#source-port eq 1198 destination#g' v48 
$ sed -i 's#eqSINGLE 2181#source-port eq 2181 destination#g' v48 
$ sed -i 's#eqSINGLE 13783#source-port eq 13783 destination#g' v48 
$ sed -i 's#eqSINGLE 13720#source-port eq 13720 destination#g' v48 
$ sed -i 's#eqSINGLE 13780#source-port eq 13780 destination#g' v48
$ sed -i 's#eqSINGLE 1556#source-port eq 1556 destination#g' v48 
$ sed -i 's#eqSINGLE 8821#source-port eq 8821 destination#g' v48 
$ sed -i 's#eqSINGLE 446#source-port eq 446 destination#g' v48 
$ sed -i 's#eqSINGLE 8280#source-port eq 8280 destination#g' v48 
$ sed -i 's#eqSINGLE 8085#source-port eq 8085 destination#g' v48 
$ sed -i 's#eqSINGLE 8086#source-port eq 8086 destination#g' v48 
$ sed -i 's#eqSINGLE 22 #source-port eq 22 destination #g' v48 
$ sed -i 's#eqSINGLE 6666#source-port eq 6666 destination#g' v48 
$ sed -i 's#eqSINGLE 5555#source-port eq 5555 destination#g' v48 
$ sed -i 's#eqSINGLE 7777#source-port eq 7777 destination#g' v48 
$ sed -i 's#eqSINGLE 2668#source-port eq 2668 destination#g' v48 
$ sed -i 's#eqSINGLE 9081#source-port eq 9081 destination#g' v48 
$ sed -i 's#eqSINGLE 34049#source-port eq 34049 destination#g' v48 
$ sed -i 's#eqSINGLE 3422#source-port eq 3422 destination#g' v48 
$ sed -i 's#eqSINGLE 9889#source-port eq 9889 destination#g' v48 
$ sed -i 's#eqSINGLE 8380#source-port eq 8380 destination#g' v48
$ sed -i 's#eqSINGLE 13782#source-port eq 13782 destination#g' v48 
$ sed -i 's#eqSINGLE 61616#source-port eq 61616 destination#g' v48 
$ sed -i 's#eqSINGLE 9586#source-port eq 9586 destination#g' v48 
$ sed -i 's#eqSINGLE 6000#source-port eq 6000 destination#g' v48 
$ sed -i 's#eqSINGLE 7788#source-port eq 7788 destination#g' v48 
$ sed -i 's#eqSINGLE 1523#source-port eq 1523 destination#g' v48 
$ sed -i 's#eqSINGLE 135#source-port eq 135 destination#g' v48 
$ sed -i 's#eqSINGLE 7890#source-port eq 7890 destination#g' v48 
$ sed -i 's#eqSINGLE 8082#source-port eq 8082 destination#g' v48 
$ sed -i 's#eqSINGLE 5556#source-port eq 5556 destination#g' v48 
$ sed -i 's#eqSINGLE 5566#source-port eq 5566 destination#g' v48 
$ sed -i 's#eqSINGLE 6677#source-port eq 6677 destination#g' v48 
$ sed -i 's#eqSINGLE pop3#source-port eq pop3 destination#g' v48 
$ sed -i 's#eqSINGLE smtp#source-port eq smtp destination#g' v48 
$ sed -i 's#eqSINGLE 3973#source-port eq 3973 destination#g' v48 
$ sed -i 's#eqSINGLE 5757#source-port eq 5757 destination#g' v48 
$ sed -i 's#eqSINGLE 2011#source-port eq 2011 destination#g' v48 
$ sed -i 's#eqSINGLE 8443#source-port eq 8443 destination#g' v48 
$ sed -i 's#eqSINGLE 9083#source-port eq 9083 destination#g' v48 
$ sed -i 's#eqSINGLE 8081#source-port eq 8081 destination#g' v48
$ sed -i 's#eqSINGLE 555#source-port eq 555 destination#g' v48 
$ sed -i 's#eqSINGLE 27017#source-port eq 27017 destination#g' v48 
$ sed -i 's#eqSINGLE 8040#source-port eq 8040 destination#g' v48 
$ sed -i 's#eqSINGLE 445#source-port eq 445 destination#g' v48 
$ sed -i 's#eqSINGLE 139#source-port eq 139 destination#g' v48 
$ sed -i 's#eqSINGLE 8088#source-port eq 8088 destination#g' v48 
$ sed -i 's#eqSINGLE 81#source-port eq 81 destination#g' v48 
$ sed -i 's#eqSINGLE 4444#source-port eq 4444 destination#g' v48 
$ sed -i 's#eqSINGLE 8379#source-port eq 8379 destination#g' v48 
$ sed -i 's#eqSINGLE 7379#source-port eq 7379 destination#g' v48 
$ sed -i 's#eqSINGLE 6379#source-port eq 6379 destination#g' v48 
$ sed -i 's#eqSINGLE 5379#source-port eq 5379 destination#g' v48 
$ sed -i 's#eqSINGLE 11212#source-port eq 11212 destination#g' v48 
$ sed -i 's#eqSINGLE 13081#source-port eq 13081 destination#g' v48 
$ sed -i 's#eqSINGLE 5800#source-port eq 5800 destination#g' v48 
$ sed -i 's#eqSINGLE 5500#source-port eq 5500 destination#g' v48 
$ sed -i 's#eqSINGLE 9082#source-port eq 9082 destination#g' v48 
$ sed -i 's#eqSINGLE 6891#source-port eq 6891 destination#g' v48 
$ sed -i 's#eqSINGLE 351#source-port eq 351 destination#g' v48 
$ grep 'eqSINGLE' v48 | wc -l
19

$ sed '/rule permit tcp source.*host/s#host#destination#g' < v48 > v49






$ sed '/eq.....$/s/eq/destination-port eq/g' < v8 > v9

$ sed '/eq......host/s/eq/source-port eq/g' < v9 > v10

$ sed '/eq.....host/s/eq/source-port eq/g' < v10 > v11

$ sed '/eq....host/s/eq/source-port eq/g' < v11 > v12

$ sed '/eq.......host/s/eq/source-port eq/g' < v12 > v13