Change your command to this:

    nc -zv 192.168.1.1 1-100 2>&1 | grep succeeded

`2>&1` causes `stderr` output of a program to be written to the same file descriptor as `stdout`. The messages on the terminal are actually mix of error and normal outputs. Without redirecting `stderr`, pipe will only get `stdout` hence grep will miss some data.
 
See section 3.5 here for more info [All about redirection][1].


  [1]: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html