while(<>) { chomp; if ( /set\spolicy\sid\s(\d+)\s(from|name\s\"[^"]+\")?\sfrom/ ) { $id = $1; push ( @{ $id_policy{$id}}, $_ ); next; } push ( @{$id_policy{$id}}, $_ ) if $id } for my $id ( keys %id_policy ) { foreach (@{ $id_policy{$id} }) { if ( /set\spolicy\sid\s(\d+)\s(from|name\s\"[^"]+\"\sfrom)\s\"Untrust\"\sto\s"DMZ/ ) { # ????????? } } } #### input set policy id 155 from "Trust" to "Untrust" "**** Users" "Safe Boot Servers" "ANY" nat src permit set policy id 155 exit set policy id 150 from "DMZ" to "Untrust" "**** Zone1" "Postini" "SMTP" nat src permit log set policy id 150 set src-address "**** Zone2" set src-address "***** Farm Servers" set src-address "**** Zones" set log session-init exit set policy id 154 from "Trust" to "DMZ" "*** - **** DB" "****" "Oracle - 1521" permit set policy id 154 exit set policy id 157 from "Untrust" to "Trust" "Postini" "MIP(194.82.***.***)" "SMTP" permit set policy id 157 exit set policy id 162 from "DMZ" to "Trust" "*****" "****_DEV Database server" "HTTP" permit set policy id 162 exit set policy id 163 name "mail-relay.**** => OUTBOUND" from "Trust" to "Untrust" "Mail-Relay" "Postini" "SMTP" nat src dip-id 5 permit set policy id 163 exit #### set policy id 148 from "Untrust" to "DMZ" "Any" "MIP(194.82.***.180)" "HTTP" permit set policy id 148 application "HTTP" set policy id 148 exit