Usando um padrão de globbing estendido em bash :
rm ./!(*999*)
Isso requer que shopt -s extglob esteja habilitado. O padrão !(*999*) corresponderá a qualquer nome no diretório atual, exceto os nomes correspondentes a *999* .
Para se preocupar apenas com arquivos regulares (não diretórios, etc.):
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
Seu primeiro comando não funcionará, pois grep irá procurar dentro dos arquivos. Ele removeria todos os arquivos que possuem linhas sem 999 (você adicionou a opção --null para que funcione com xargs -0 ).
Seu segundo comando não funcionará, pois grep no macOS não suporta --null-data (ele tem, no entanto, uma opção --null , mas apenas para gerar a saída do nome do arquivo). Observe também que ele procuraria 999 em qualquer lugar no caminho do arquivo (incluindo os componentes do diretório), não apenas o nome do arquivo.