Given one or more patterns, grep
searches input files
for matches to the patterns.
When it finds a match in a line,
it copies the line to standard output (by default),
or produces whatever other sort of output you have requested with options.
Though grep
expects to do the matching on text,
it has no limits on input line length other than available memory,
and it can match arbitrary characters within a line.
If the final byte of an input file is not a newline,
grep
silently supplies one.
Since newline is also a separator for the list of patterns,
there is no way to match newline characters in a text.