Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

image

share|improve this question
up vote 14 down vote accepted

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

                          SEARCHING

  /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:

/pattern
      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 \)|
share|improve this answer

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

share|improve this answer

Another way to do this:

man -html=firefox find

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

share|improve this answer
4  
That's --html or -H. – Boris the Spider Feb 4 at 11:15

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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