Home > System Tutorial > LINUX > How To Replace Text In Multiple Files Using A Bash Script In Linux

How To Replace Text In Multiple Files Using A Bash Script In Linux

尊渡假赌尊渡假赌尊渡假赌
Release: 2025-03-24 09:30:15
Original
1004 people have browsed it

How To Replace Text In Multiple Files Using A Bash Script In Linux

If you have many files with outdated information, updating them manually is time-consuming. Whether it's fixing outdated file paths, renaming variables, or modifying config values, Bash provides powerful tools like grep, sed, and find to automate this task. In this guide, we will learn how to replace text across multiple files efficiently using a Bash script.

Table of Contents

Why and When Use Bash for Bulk Text Replacement?

Automating text replacement is useful for:

  • Updating variable names in code files.
  • Changing file paths in scripts.
  • Fixing incorrect configuration settings.
  • Renaming project names in documentation.

Instead of editing each file manually, a Bash script can do it in seconds.

Allow me to explain it with an example Bash script.

Problem: Bulk Replace Paths in Multiple Files

Imagine you have multiple files referring to old log file paths:

  • Old Path: ~/data/logs/app.log
  • New Path: ~/data/log/app.log

Instead of searching and replacing each instance manually, let’s automate it.

Step 1: Create a Test Directory and Sample Files

First, create a test environment before modifying real files.

Create a directory in your home folder:

mkdir -p ~/replace_test && cd ~/replace_test
Copy after login

Create sample files containing the old path:

echo 'Log file: ~/data/logs/app.log' > script1.sh
echo 'ERROR_LOG="~/data/logs/app.log"' > config.env
echo 'echo "Processing ~/data/logs/app.log"' > process.sh
Copy after login

Verify occurrences of the old path:

grep "~/data/logs/app.log" *
Copy after login
Copy after login

Sample Output:

config.env:ERROR_LOG="~/data/logs/app.log"
process.sh:echo "Processing ~/data/logs/app.log"
script1.sh:Log file: ~/data/logs/app.log
Copy after login

Step 2: Replace Text in Multiple Files Using a Bash Script

Now, create a script named replace_text.sh:

#!/usr/bin/env bashif [[ $# -ne 3 ]]; then    echo "Usage: $0 <old_path> <new_path> <directory>"    exit 1fiOLD_PATH=$(printf '%s\n' "$1" | sed 's/[\/&]/\\&/g')NEW_PATH=$(printf '%s\n' "$2" | sed 's/[\/&]/\\&/g')SEARCH_DIR=$3echo "Replacing occurrences of: $1 -> $2 in $SEARCH_DIR"# Find and replace text safelyfind "$SEARCH_DIR" -type f -exec sed -i "s/$OLD_PATH/$NEW_PATH/g" {} +echo "Replacement completed."
Copy after login

Step 3: Make the Script Executable

chmod +x replace_text.sh
Copy after login

Step 4: Run the Script

Execute the script to replace all occurrences of ~/data/logs/app.log with ~/data/log/app.log:

./replace_text.sh "~/data/logs/app.log" "~/data/log/app.log" ~/replace_test
Copy after login

Sample Output:

Replacing occurrences of: ~/data/logs/app.log -> ~/data/log/app.log in /home/ostechnix/replace_test
Replacement completed.
Copy after login

Step 5: Verify the Changes

Run:

grep "~/data/log/app.log" *
Copy after login

Sample Output:

config.env:ERROR_LOG="~/data/log/app.log"
process.sh:echo "Processing ~/data/log/app.log"
script1.sh:Log file: ~/data/log/app.log
Copy after login

Ensure no old path remains:

grep "~/data/logs/app.log" *
Copy after login
Copy after login

If there's no output, the replacement worked.

This script,

  • Handles Special Characters: Escapes /, &, and other symbols correctly.
  • Uses find -exec sed: Safer than grep | xargs sed.
  • Efficient for Large Projects: Works on many files without excessive CPU usage.

You can now use this script on real files.

Precautions Before Running it on Real Files:

  • Backup Your Files: Always create a backup before making bulk changes
  • Test on a Small Sample: Run it on a test directory first, as we did with ~/replace_test.
  • Dry Run with grep: Check how many files will be affected. You can run grep -rl "~/data/logs/app.log" ~/replace_test/ to do it.
  • Manually Inspect Changes: After running the script, verify a few modified files.

Conclusion

In this tutorial, we learned how to replace text in multiple files using a simple Bash script. We have explained how this script automates path updates in multiple files, preventing errors and saving time with a practical example. Always test with backups before running on critical files.

Related Read:

  • Bash Shell Scripting Tutorial For Beginners

The above is the detailed content of How To Replace Text In Multiple Files Using A Bash Script In Linux. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template