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
Automating text replacement is useful for:
Instead of editing each file manually, a Bash script can do it in seconds.
Allow me to explain it with an example Bash script.
Imagine you have multiple files referring to old log file paths:
Instead of searching and replacing each instance manually, let’s automate it.
First, create a test environment before modifying real files.
Create a directory in your home folder:
mkdir -p ~/replace_test && cd ~/replace_test
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
Verify occurrences of the old path:
grep "~/data/logs/app.log" *
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
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."
chmod +x replace_text.sh
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
Sample Output:
Replacing occurrences of: ~/data/logs/app.log -> ~/data/log/app.log in /home/ostechnix/replace_test Replacement completed.
Run:
grep "~/data/log/app.log" *
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
Ensure no old path remains:
grep "~/data/logs/app.log" *
If there's no output, the replacement worked.
This script,
You can now use this script on real files.
Precautions Before Running it on Real Files:
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:
Das obige ist der detaillierte Inhalt vonSo ersetzen Sie Text in mehreren Dateien mit einem Bash -Skript unter Linux in mehreren Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!