Batch Find-and-Replace: Update Text Across Multiple Files Fast
When you need to update the same text across many files—whether fixing a typo, updating a function name, or changing a company address—doing it manually is slow and error-prone. This guide shows fast, reliable methods for batch find-and-replace across multiple files, with options for GUI tools, command-line utilities, and simple scripts.
1. Choose the right tool
- Text editor with multi-file replace: VS Code, Sublime Text, Atom. Best for code or project directories with file-type filtering and preview.
- Command-line tools: grep, sed, awk, perl — ideal for automation, large repositories, and integrating into scripts.
- Cross-platform utilities: ripgrep + sed/perl, or PowerShell on Windows.
- Dedicated batch tools: BBEdit (macOS), Notepad++ (Windows, with “Find in Files”), or specialized batch editors for non-code files.
2. Prepare safely
- Backup: Create a copy or use version control (git). Undoing mass edits is much easier with a commit history or file backup.
- Test scope: Run a dry-run or search-only pass to confirm which files will be affected.
- Limit by file type: Restrict replacements to relevant extensions (e.g., .txt, .md, .js) to avoid corrupting binaries or config files.
3. Quick methods (examples)
VS Code (GUI)
- Open project folder.
- Press Ctrl+Shift+F (Cmd+Shift+F on mac).
- Enter search term, then the replace term.
- Set files to include/exclude (e.g.,.js, !nodemodules).
- Click the replace preview to review matches, then “Replace All.”
Notepad++ (Windows)
- Search > Find in Files.
- Input “Find what” and “Replace with.”
- Set “Directory” and “Filters” (e.g., .txt;.csv).
- Click “Replace in Files” (make sure backups or version control are in place).
Command line (Linux/macOS)
- Preview matches:
Code
rg –hidden –glob ‘!nodemodules’ “oldText”
- Replace with perl (in-place):
Code
perl -pi -e ’s/oldText/newText/g’ \((rg -l "oldText" --hidden --glob '!node_modules') </span></code></div></div></pre> <ul> <li>Replace with sed (GNU sed):</li> </ul> <pre><div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8"><i><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M15.434 7.51c.137.137.212.311.212.49a.694.694 0 0 1-.212.5l-3.54 3.5a.893.893 0 0 1-.277.18 1.024 1.024 0 0 1-.684.038.945.945 0 0 1-.302-.148.787.787 0 0 1-.213-.234.652.652 0 0 1-.045-.58.74.74 0 0 1 .175-.256l3.045-3-3.045-3a.69.69 0 0 1-.22-.55.723.723 0 0 1 .303-.52 1 1 0 0 1 .648-.186.962.962 0 0 1 .614.256l3.541 3.51Zm-12.281 0A.695.695 0 0 0 2.94 8a.694.694 0 0 0 .213.5l3.54 3.5a.893.893 0 0 0 .277.18 1.024 1.024 0 0 0 .684.038.945.945 0 0 0 .302-.148.788.788 0 0 0 .213-.234.651.651 0 0 0 .045-.58.74.74 0 0 0-.175-.256L4.994 8l3.045-3a.69.69 0 0 0 .22-.55.723.723 0 0 0-.303-.52 1 1 0 0 0-.648-.186.962.962 0 0 0-.615.256l-3.54 3.51Z"></path></svg></i><p class="li3asHIMe05JPmtJCytG wZ4JdaHxSAhGy1HoNVja cPy9QU4brI7VQXFNPEvF">Code</p></div><div class="CF2lgtGWtYUYmTULoX44"><button type="button" class="st68fcLUUT0dNcuLLB2_ ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ CPXAhl7VTkj2dHDyAYAf" data-copycode="true" role="button" aria-label="Copy Code"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M9.975 1h.09a3.2 3.2 0 0 1 3.202 3.201v1.924a.754.754 0 0 1-.017.16l1.23 1.353A2 2 0 0 1 15 8.983V14a2 2 0 0 1-2 2H8a2 2 0 0 1-1.733-1H4.183a3.201 3.201 0 0 1-3.2-3.201V4.201a3.2 3.2 0 0 1 3.04-3.197A1.25 1.25 0 0 1 5.25 0h3.5c.604 0 1.109.43 1.225 1ZM4.249 2.5h-.066a1.7 1.7 0 0 0-1.7 1.701v7.598c0 .94.761 1.701 1.7 1.701H6V7a2 2 0 0 1 2-2h3.197c.195 0 .387.028.57.083v-.882A1.7 1.7 0 0 0 10.066 2.5H9.75c-.228.304-.591.5-1 .5h-3.5c-.41 0-.772-.196-1-.5ZM5 1.75v-.5A.25.25 0 0 1 5.25 1h3.5a.25.25 0 0 1 .25.25v.5a.25.25 0 0 1-.25.25h-3.5A.25.25 0 0 1 5 1.75ZM7.5 7a.5.5 0 0 1 .5-.5h3V9a1 1 0 0 0 1 1h1.5v4a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5V7Zm6 2v-.017a.5.5 0 0 0-.13-.336L12 7.14V9h1.5Z"></path></svg>Copy Code</button><button type="button" class="st68fcLUUT0dNcuLLB2_ WtfzoAXPoZC2mMqcexgL ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ GnLX_jUB3Jn3idluie7R"><svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" d="M20.618 4.214a1 1 0 0 1 .168 1.404l-11 14a1 1 0 0 1-1.554.022l-5-6a1 1 0 0 1 1.536-1.28l4.21 5.05L19.213 4.382a1 1 0 0 1 1.404-.168Z" clip-rule="evenodd"></path></svg>Copied</button></div></div><div class="mtDfw7oSa1WexjXyzs9y" style="color: var(--sds-color-text-01); font-family: var(--sds-font-family-monospace); direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: var(--sds-font-size-label); line-height: 1.2em; tab-size: 4; hyphens: none; padding: var(--sds-space-x02, 8px) var(--sds-space-x04, 16px) var(--sds-space-x04, 16px); margin: 0px; overflow: auto; border: none; background: transparent;"><code class="language-text" style="color: rgb(57, 58, 52); font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: 0.9em; line-height: 1.2em; tab-size: 4; hyphens: none;"><span>sed -i 's/oldText/newText/g' \)(grep -rl “oldText” –exclude-dir=nodemodules)
PowerShell (Windows)
- Preview:
Code
Get-ChildItem -Recurse -Filter *.txt | Select-String -Pattern “oldText”
- Replace:
Code
Get-ChildItem -Recurse -Filter *.txt | ForEach-Object { (Get-Content \(_.FullName) -replace 'oldText','newText' | Set-Content \)_.FullName }
4. Advanced tips
- Use regex for pattern-based changes (e.g., version numbers, function signatures). Test regex on sample files first.
- Preserve file encoding and line endings: Some tools change encoding (UTF-8 vs ANSI) or CRLF vs LF; check settings.
- Atomic edits: For critical systems, write scripts that edit to a temp file then rename, to avoid partial writes.
- Logging: Record filenames changed and diffs for auditing and rollback.
5. Example use cases
- Rename a function across a codebase.
- Update a copyright year or company address across docs.
- Change URLs when migrating domains.
- Correct a repeated typo in many articles.
6. Quick checklist before running replace
- Backup or commit current files.
- Run search-only to confirm targets.
- Restrict by file type and directory.
- Test on a small subset or a single file.
- Run replace with preview where available.
- Review changes and run tests (for codebases).
7. When to use automation vs manual review
- Automate when changes are simple, consistent, and low-risk (e.g., exact string).
- Manually review or apply selective replaces when context matters (e.g., similar phrases with different meanings).
Batch find-and-replace saves hours when done carefully. Pick the right tool for your files, test thoroughly, keep backups or version control, and use previews/logs to ensure safe, reversible changes.
Leave a Reply