Compare, with d_context_a.in from /usr/tests/usr.bin/grep: $ gnugrep -C1 -o pig d_context_a.in pig pig -- pig pig pig # Behavior is same on newer gnugrep. $ grep -C1 -o pig d_context_a.in pig Boar, sow, barrow, or gilt -- pig Though mountains may topple and tilt. -- Though you may be thrown over by Tabby and Rover, pig pig pig -- Thomas Pynchon, "Gravity's Rainbow" # Ugh I note here that it *looks* like we should do all of the normal context behavior but not actually print the context, just the lines that actually matched and the separators that comes with context. I'll have to create some further test cases for different scenarios of overlapping/adjacency behavior of both matching lines and non-matching lines to make sure that's right. This is likely a really strange corner case that probably won't have any practical application, but consistency is good.
I can reproduce that bsdgrep is different than gnugrep in this example. However, ripgrep behaves like bsdgrep and highlights the "pig" part of the output in red on an interactive terminal. Should we close the issue since it works as intended?