plan9-grep.1 -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort(1) | awk(1posix) 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
search a file for a pattern
    A  pipeline is a sequence of one or more commands separated by one of the control operators | or |&.  The
    format for a pipeline is:

           [time [-p]] [ ! ] command [ [||&] command2 ... ]

    The standard output of command is connected  via  a  pipe  to  the  standard  input  of  command2.   This
    connection  is performed before any redirections specified by the command (see REDIRECTION below).  If |&
    is used, the standard error of command is connected to command2's standard input through the pipe; it  is
    shorthand  for  2>&1  |.   This  implicit  redirection  of  the  standard  error  is  performed after any
    redirections specified by the command.

    The return status of a pipeline is the exit status of the last command, unless  the  pipefail  option  is
    enabled.   If  pipefail  is  enabled,  the  pipeline's return status is the value of the last (rightmost)
    command to exit with a non-zero status, or zero if all commands exit successfully.  If the reserved  word
    !   precedes  a  pipeline, the exit status of that pipeline is the logical negation of the exit status as
    described above.  The shell waits for all commands in the pipeline to terminate before returning a value.

    If the time reserved word precedes a pipeline, the elapsed as well as user and system  time  consumed  by
    its execution are reported when the pipeline terminates.  The -p option changes the output format to that
    specified by POSIX.  When the shell is in posix mode, it does not recognize time as a  reserved  word  if
    the  next  token begins with a `-'.  The TIMEFORMAT variable may be set to a format string that specifies
    how the timing information should be displayed; see the description of TIMEFORMAT under  Shell  Variables

    When the shell is in posix mode, time may be followed by a newline.  In this case, the shell displays the
    total user and system time consumed by the shell and its children.  The TIMEFORMAT variable may  be  used
    to specify the format of the time information.

    Each command in a pipeline is executed as a separate process (i.e., in a subshell).
sort lines of text files
pattern scanning and processing language
       If no -f option is specified, the first operand to awk shall be the text of the awk  program.  The
       application shall supply the program operand as a single argument to awk. If the text does not end
       in a <newline>, awk shall interpret the text as if it did.

       Either of the following two types of argument can be intermixed:

       A pathname of a file that contains the input to be read, which  is  matched  against  the  set  of
       patterns  in  the  program.  If  no file operands are specified, or if a file operand is '-' , the
       standard input shall be used.

       An operand that begins with an underscore or alphabetic character from the portable character  set
       (see  the  table  in  the  Base  Definitions volume of IEEE Std 1003.1-2001, Section 6.1, Portable
       Character Set), followed by a sequence of underscores, digits, and alphabetics from  the  portable
       character  set,  followed  by the '=' character, shall specify a variable assignment rather than a
       pathname. The characters before the '=' represent the name of an awk variable; if that name is  an
       awk  reserved  word  (see  Grammar ) the behavior is undefined. The characters following the equal
       sign shall be interpreted as if they appeared in the  awk  program  preceded  and  followed  by  a
       double-quote ( ' )' character, as a STRING token (see Grammar ), except that if the last character
       is an unescaped backslash, it shall be interpreted as a literal backslash rather than as the first
       character  of  the  sequence  "\"" . The variable shall be assigned the value of that STRING token
       and, if appropriate, shall be considered a numeric string (see Expressions in awk ), the  variable
       shall  also be assigned its numeric value. Each such variable assignment shall occur just prior to
       the processing of the following file, if any. Thus, an assignment before the first  file  argument
       shall  be  executed  after  the  BEGIN  actions  (if any), while an assignment after the last file
       argument shall occur before the END actions (if any). If there are no file arguments,  assignments
       shall be executed before processing the standard input.
source manpages: plan9-grepsortawk