^@ is how the NUL byte (numerical value 0) is often represented, e.g.
$ printf "null\000byte\n" > nullbyte
$ cat -A nullbyte
null^@byte$
One problem with dealing with it, is that you can't pass it literally on the command line. It's just impossible, as the same byte is used to terminate the command line arguments. Instead, you'll have to escape it somehow (and \^@ will not work.)
Regular expressions as supported by GNU grep on my system don't seem to provide a way to deal with it. GNU sed on the other hand appears to understand \x00, so this works to remove it:
$ sed -e 's/\x00//g' nullbyte |cat -A
nullbyte$
tr should also work, though it doesn't have -i:
$ tr -d '\000' < nullbyte | cat -A
nullbyte$