Existem dois problemas que precisam ser resolvidos aqui:
- gera uma lista de números de regras ufw que correspondem a uma string desejada.
- faça o shell expandir essa lista e cole-a no final de uma sequência de comandos 'ufw delete [rule number]'.
Acho que tenho uma solução para o problema nº 1 por meio desse único liner no bash:
ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}')
O exemplo acima corresponde a qualquer regra de firewall para a string '80 / tcp 'e imprime apenas o número da regra com os colchetes removidos.
Ainda não resolvi o problema # 2 porque, da melhor maneira que posso dizer, o comando 'ufw delete' não possui um comutador que suprime o prompt de confirmação '(y | n)', impedindo assim a automação.
No entanto, você pode executar o comando abaixo e descobrir manualmente cada exclusão de regra pressionando a tecla 'y' para confirmar e, em seguida, a seta para cima = > entrar para enxaguar e repetir
ufw delete $(ufw status numbered |(grep '80/tcp'|awk -F"[][]" '{print $2}'))