Você pode fazer isso com um único comando sed. Primeiro, como estratégia geral, para extrair uma parte de uma linha em sed, use o comando s , com uma expressão regular que corresponde à linha inteira (começando com ^ e terminando com $ ), com o parte a reter em um grupo ( \(…\) ), substituindo toda a linha pelo conteúdo do (s) grupo (s) a manter. Passe a opção -n para desativar a impressão padrão e coloque o modificador p para imprimir linhas onde há algo para extrair. Você pode restringir ainda mais a extração prefixando o comando com um regex que deve corresponder à linha.
sed -n '/view external.*denied/ s/^.* client \([0-9.][0-9.]*\)#.*//p'
Se você preferir usar o awk, você pode usar sua função sub para remover uma parte de uma string.
grep -E 'view external.*denied' /var/log/messages |
awk '{sub(/#.*/, "", $7); print $7}'
Você também pode usar a função index para localizar a função # e substr para extrair a parte que deseja manter.
grep -E 'view external.*denied' /var/log/messages |
awk '{print substr($7, 1, index($7, "#"))}'
Você pode combinar facilmente o comando grep no comando awk.
</var/log/messages awk '/view external.*denied/ {sub(/#.*/, "", $7); print $7}'