Eu acredito que você poderia tentar (?:(?!X).) com PCRE, definitivamente funciona quando X é uma string, mas não tenho 100% de certeza de que funcionaria o tempo todo quando X é uma regex.
echo "dust mite" | grep -P '^(?:(?!abc).)*$'
dust mite
echo "dust abc mite" | grep -P '^(?:(?!abc).)*$'
echo "dust mite" | grep -P '^(?:(?!abc(x+y)).)*$'
dust mite
echo "dust abcxxxxy mite" | grep -P '^(?:(?!abc(x+y)).)*$'