I find grep
's --color=always
flag to be tremendously useful. However, grep only prints lines with matches (unless you ask for context lines). Given that each line it prints has a match, the highlighting doesn't add as much capability as it could.
I'd really like to cat
a file and see the entire file with the pattern matches highlighted.
Is there some way I can tell grep to print every line being read regardless of whether there's a match? I know I could write a script to run grep on every line of a file, but I was curious whether this was possible with standard grep
.
Best Answer
Here are some ways to do it:
The
|
symbol is the OR operator. Either escape it using\
or tell grep that the search text has to be interpreted as regular expressions by adding -E or using theegrep
command instead ofgrep
.The search text "pattern|$" is actually a trick, it will match lines that have
pattern
OR lines that have an end. Because all lines have an end, all lines are matched, but the end of a line isn't actually any characters, so it won't be colored.To also pass the colored parts through pipes, e.g. towards
less
, provide thealways
parameter to--color
: