Heim > System-Tutorial > LINUX > So ersetzen Sie Text in mehreren Dateien mit einem Bash -Skript unter Linux in mehreren Dateien

So ersetzen Sie Text in mehreren Dateien mit einem Bash -Skript unter Linux in mehreren Dateien

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2025-03-24 09:30:15
Original
1004 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Verify occurrences of the old path:

grep "~/data/logs/app.log" *
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren

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."
Nach dem Login kopieren

Step 3: Make the Script Executable

chmod +x replace_text.sh
Nach dem Login kopieren

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
Nach dem Login kopieren

Sample Output:

Replacing occurrences of: ~/data/logs/app.log -> ~/data/log/app.log in /home/ostechnix/replace_test
Replacement completed.
Nach dem Login kopieren

Step 5: Verify the Changes

Run:

grep "~/data/log/app.log" *
Nach dem Login kopieren

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
Nach dem Login kopieren

Ensure no old path remains:

grep "~/data/logs/app.log" *
Nach dem Login kopieren
Nach dem Login kopieren

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

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage