Your `grep` prints all lines containing non-punctuation characters. That's not the same as printing all lines that do not contain punctuation characters.
For the latter, you want the `-v` switch (print lines that don't match the pattern):
grep -v '[[:punct:]]' file.txt
If, for some reason you don't want to use the `-v` switch, you must make sure that the whole line consists of non-punctuation characters:
grep '^[^[:punct:]]\+$' file.txt