Skip to content
Highlight Perl regular expression patterns with multiple colors
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Highlight Perl regular expression patterns with multiple colors

Alt Text


This was initially from hhighlighter, but I decided to implement the low level pattern parsing and highlighting, which are handled by ack/ack-grep in hhighlighter. This is because I found issues when using hhighlighter in some test cases - For example:

  • echo "tastb'c" | h "b\'c" will reach the following error:

    bash: eval: line 145: unexpected EOF while looking for matching `''

    bash: eval: line 146: syntax error: unexpected end of file

  • echo "abbcccdddd" | h 'b?' won't come back to shell until Ctrl+C.

  • echo "abcdefgababcde" | h '(ab){2,5}' will highlight only the last "ab", not "abab".

By using mch, all these problems go away, just like how grep -P does in pattern matching - Besides, mch supports different colors for different patterns. That's it.


Doing the following should NOT spoil your existing environment - You will only get a new command h in the form of Bash function.

In ~/.bashrc, source the script h. And the command h will be ready for use.


The text that has patterns to be highlighted HAS TO be piped into the command h. It may have the following use cases:

  • Used by other scripts, like cxpgrep, in output processing.
  • Highlight patterns in a text file in different colors:
cat FILE | h PAT1 PAT2 ... | less -R

It supports only 1 option -i that means case insensitive matching.


I designed a bunch of test cases to verify the implementation of pattern parsing and highlighting. Cases can be added to the file cases_h. And there are 2 ways to use the cases: automated and interactive.


source cases_h


source cases_h

In both methods, one needs to compare the output of h and grep -P. Certainly grep doesn't support multi-color highlighting.

Also, note that these 2 scripts are NOT to be run directly. They need to be sourced into the current shell environment. See above.


  • 1.0
    • First working code
  • 1.1
    • README and source code header comment updates


This software (mch) is distributed under the MIT license.

You can’t perform that action at this time.