I want to get the explanation for ! option (which means exclude) in find command in the man find.

And then I press / and shift + 1 , a Non-match popped out, instead of ! So my question is how to search for ! in a manpage?



The default man pager is less. If you look at less's help (press h while in it), you'll see:


  /pattern          *  Search forward for (N-th) matching line.
  ?pattern          *  Search backward for (N-th) matching line.
  n                 *  Repeat previous search (for N-th occurrence).
  N                 *  Repeat previous search in reverse direction.
  ESC-n             *  Repeat previous search, spanning files.
  ESC-N             *  Repeat previous search, reverse dir. & spanning files.
  ESC-u                Undo (toggle) search highlighting.
  &pattern          *  Display only matching lines
        A search pattern may be preceded by one or more of:
        ^N or !  Search for NON-matching lines.

Or in man less:

      Search forward in the file for the N-th line containing the pat‐
      tern.  N defaults to 1.  The pattern is a regular expression, as
      recognized  by  the  regular expression library supplied by your
      system.  The search starts at the first line displayed (but  see
      the -a and -j options, which change this).

      Certain  characters  are  special if entered at the beginning of
      the pattern; they modify the type of search rather  than  become
      part of the pattern:

      ^N or !
             Search for lines which do NOT match the pattern.

So, a pattern of just ! is an empty pattern (which matches anything) negated - so nothing will match it.

You'll have to escape the significance of ! at the start of a pattern, by either using a backslash (\!), or otherwise making it not the first character of the regex (/[!], for example).

The other way is to use grep:

$ man find | grep !
       with  `-', or the argument `(' or `!'.  That argument and any following
       ! expr True  if  expr  is false.  This character will also usually need
              Same as ! expr, but not POSIX compliant.
       The POSIX standard specifies parentheses `(', `)', negation `!' and the
       find /sbin /usr/sbin -executable \! -readable -print
       find . -perm -444 -perm /222 ! -perm /111
       find . -perm -a+r -perm /a+w ! -perm /a+x
       -perm  /222 or -perm /a+w) but are not executable for anybody ( ! -perm
       /111 and ! -perm /a+x respectively).
       find . -name .snapshot -prune -o \( \! -name *~ -print0 \)|

You need to type \ before you type !, so that it will not be interpreted as a negation regular expression in search.


Another way to do this:

man --html=firefox find

After the manpage opens in firefox, press CTRL + F to search for any character.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.