Em geral, um analisador de CSV adequado seria recomendado. Nesse caso simples, o awk fará: use aspas duplas como o caractere separador de campo e:
awk -F '"' -v OFS='"' '{
for (i=2; i<=NF; i+=2)
gsub(/[[:blank:]]/, "_", $i)
print
}' <<END
first "UDP netprobe" hello
second "ACL allow" friendly "oops, another quoted field"
third "ACL deny" world
END
first "UDP_netprobe" hello
second "ACL_allow" friendly "oops,_another_quoted_field"
third "ACL_deny" world
Para os fãs de uma linha:
awk -F\" '{for(i=2;i<=NF;i+=2)gsub(/[[:blank:]]/,"_",$i)}1' OFS=\" file