Emacs: Find/Replace Tutorial

Buy Xah Emacs Tutorial. Master emacs benefits for life.
, , …,

This page shows you how to use emacs to do find/replace, and tells you how to do case-sensitive or case-insensitive match or replacement, and how to force captured regex text pattern into upper or lower case.

Find/Replace Commands

Interactive Find/Replace

Here are the most useful find/replace commands. These are also under the menu 〖Edit ▸ Replace〗.

Command NameKeyTargetPurpose
query-replaceAlt+%active region, or cursor point to endinteractive find/replace
query-replace-regexpCtrl+Alt+%active region, or cusor point to endinteractive find/replace with regex pattern
dired-do-query-replace-regexpIn dired, 【Q】.marked files in diredinteractive find/replace on multiple files

For example, call query-replace, then type your search string, then type your replacement string.

When a query command asks you for confirmation, here's the most common keys:

For detail on using dired-do-query-replace-regexp, see: Interactively Find/Replace String Patterns on Multiple Files.

Batch Replace

Emacs also have commands replace-stringreplace-regexp. They are the non-interactive versions of query-replacequery-replace-regexp. They do all replacements in one-shot without asking confirmation for each replacement.

In practice, these are not much useful, because you can just call the interactive version and press ! to complete in one shot.

Default Case Sensitivity: Smart

By default: If your search string contains a capital letter, search is automatically case-sensitive, otherwise it's not case-sensitive.

By default, the case of the replaced text is smartly dependent on the matched text. For example, suppose your search string is here, and your replacement string is dragon. Emacs will find any of {here, Here, HERE}. Now, when emacs found here, the replacement will be dragon, when emacs found Here, the replacement will be Dragon, when emacs found HERE, the replacement will be DRAGON.

If you want the letter case of your replacement string be exactly as you have it, you need to set the variable case-replace to nil. You can do so by calling set-variable.

Turn On/Off Smart Case Sensitivity

If you want the letter-case in both find & replacement string be exactly you typed, then call toggle-case-fold-search or menu 〖Options ▸ Case-Insensitive Search〗.

You can also give it a key such as F8. 〔➤ Emacs: How to Define Keys〕 Or you can give it a alias such as “tc” 〔➤ Emacs: Defining Alias to Increase Productivity

Force Case Change on Matched Text in Regex Match

If you are doing a regex search, and you want to force the replacement to upper case or lower case, you can use \,(upcase \1) or \,(downcase \1) for replacement string.

For example, suppose you have this text:

<p>once upon a time …</p>

<p>There is a dragon who lived in …</p>

<p>princess Tana is still waiting …</p>

Suppose you want all paragraphs to start with a capital letter. So, you use a pattern that catches the first letter after <p>, like this <p>\([a-z]\).

To make your captured pattern upper case, give your replacement string this expression: <p>\,(upcase \1). The \, tells emacs that what follows should be a lisp expression. The (upcase \1) is a lisp expression. The upcase is a lisp function and the \1 means the 1st captured string in your regex pattern.

For a more complex example in using the \, in replacement, see: Regex Replace with a Function in Emacs Lisp.

(info "(emacs) Search")

Like it?
Buy Xah Emacs Tutorial
or share
blog comments powered by Disqus