20.10 Other Search-and-Loop Commands
Here are some other commands that find matches for a regular
expression. They all ignore case in matching, if the pattern contains
no upper-case letters and case-fold-search
is non-nil
.
Aside from occur
and its variants, all operate on the text from
point to the end of the buffer, or on the active region in Transient
Mark mode.
- M-x occur <RET> regexp <RET>
- Display a list showing each line in the buffer that contains a match
for regexp. To limit the search to part of the buffer, narrow
to that part (see Narrowing). A numeric argument n
specifies that n lines of context are to be displayed before and
after each matching line. Currently,
occur
can not correctly
handle multiline matches.
The buffer ‘*Occur*’ containing the output serves as a menu for
finding the occurrences in their original context. Click
Mouse-2 on an occurrence listed in ‘*Occur*’, or position
point there and type <RET>; this switches to the buffer that was
searched and moves point to the original of the chosen occurrence.
o and C-o display the match in another window; C-o
does not select it.
Occur mode supports the next-error
functionality described in
Compilation Mode.
- M-x list-matching-lines
- Synonym for M-x occur.
- M-x multi-occur <RET> buffers <RET> regexp <RET>
- This function is just like
occur
, except it is able to search
through multiple buffers.
- M-x multi-occur-by-filename-regexp <RET> bufregexp <RET> regexp <RET>
- This function is similar to
multi-occur
, except the buffers to
search are specified by a regexp on their filename.
- M-x how-many <RET> regexp <RET>
- Print the number of matches for regexp that exist in the buffer
after point. In Transient Mark mode, if the region is active, the
command operates on the region instead.
- M-x flush-lines <RET> regexp <RET>
- This command deletes each line that contains a match for regexp,
operating on the text after point; it deletes the current line
if it contains a match starting after point. In Transient Mark mode,
if the region is active, the command operates on the region instead;
it deletes a line partially contained in the region if it contains a
match entirely contained in the region.
If a match is split across lines, flush-lines
deletes all those
lines. It deletes the lines before starting to look for the next
match; hence, it ignores a match starting on the same line at which
another match ended.
- M-x keep-lines <RET> regexp <RET>
- This command deletes each line that does not contain a match for
regexp, operating on the text after point; if point is not at the
beginning of a line, it always keeps the current line. In Transient
Mark mode, if the region is active, the command operates on the region
instead; it never deletes lines that are only partially contained in
the region (a newline that ends a line counts as part of that line).
If a match is split across lines, this command keeps all those lines.
You can also search multiple files under control of a tags table
(see Tags Search) or through the Dired A command
(see Operating on Files), or ask the grep
program to do it
(see Grep Searching).