Tips en Trucs 2026

Tekst vervangen in meerdere bestanden met een Bash-script

Als je veel bestanden hebt met verouderde informatie, is het handmatig bijwerken ervan tijdrovend. Of het nu gaat om het corrigeren van verouderde bestandspaden, het hernoemen van variabelen of het wijzigen van configuratiewaarden, Bash biedt krachtige hulpmiddelen zoals grep, sed en find om deze taak te automatiseren.

Het automatiseren van tekstvervanging is handig voor bijvoorbeeld:

In plaats van elk bestand handmatig te bewerken, kan een Bash-script dit in enkele seconden doen.

Voorbeeldscript om paden te vervangen in meerdere bestanden

Stel je voor dat je meerdere bestanden hebt die verwijzen naar oude logbestandslocaties:

In plaats van elke instantie handmatig te zoeken en te vervangen, kunnen we dit automatiseren.

Eerst maken we een testomgeving voordat we echte bestanden wijzigen.

We maken daarvoor een testmap aan in de Home-map:

dany@pindabook:~$ mkdir -p ~/vervang_test && cd ~/vervang_test

De tweede opdracht (na &&) opent de pas aangemaakte map. Daarna maken we voorbeeldbestanden aan met het oude pad:

dany@pindabook:~/vervang_test$ echo 'Log file: ~/data/logs/app.log' > script1.sh
dany@pindabook:~/vervang_test$ echo 'ERROR_LOG="~/data/logs/app.log"' > config.env
dany@pindabook:~/vervang_test$ echo 'echo "Processing ~/data/logs/app.log"' > process.sh

En controleren we het voorkomen van het oude pad:

dany@pindabook:~/vervang_test$ grep "~/data/logs/app.log" *
config.env:ERROR_LOG="~/data/logs/app.log"
process.sh:echo "Processing ~/data/logs/app.log"
script1.sh:Log file: ~/data/logs/app.log

Nu kunnen we met de teksteditor nano een script genaamd replace_text.sh aanmaken:

dany@pindabook:~/vervang_test$ nano replace_text.sh

Voer het volgende script in:

#!/usr/bin/env bash

if [[ $# -ne 3 ]]; then
   echo "Gebruik: $0 <zoek_naar> <vervang_door> <werkmap>"
   exit 1
fi

ZOEK_NAAR=$(printf '%s\n' "$1" | sed 's/[\/&]/\\&/g')
VERVANG_DOOR=$(printf '%s\n' "$2" | sed 's/[\/&]/\\&/g')
WERKMAP=$3

echo "Vervang in $WERKMAP $1 door $2."

# Zoek en vervang de tekst op een veilige manier
find "$WERKMAP" -type f -exec sed -i "s/$ZOEK_NAAR/$VERVANG_DOOR/g" {} +

echo "Vervanging voltooid."

De find opdracht zoekt daarbij naar alle bestanden en geeft de gevonden bestanden door aan de sed opdracht die zorgt voor het vervangen. Dankzij de optie {} + verloopt dit zeer efficiënt.

Replace Text

Sla het script op en sluit nano met de sneltoets Ctrl+x. Antwoordt met j op de vraag om het script op te slaan en bevestig met Return.

Maak het script uitvoerbaar:

dany@pindabook:~/vervang_test$ chmod +x replace_text.sh

Voer het script uit om alle instanties van ~/data/logs/app.log te vervangen door ~/data/log/app.log:

dany@pindabook:~/vervang_test$ ./replace_text.sh "~/data/logs/app.log" "~/data/log/app.log" ~/vervang_test
Vervang in /home/dany/vervang_test ~/data/logs/app.log door ~/data/log/app.log.
Vervanging voltooid.

Controleer het resultaat:

dany@pindabook:~/vervang_test$ grep "~/data/log/app.log" *
config.env:ERROR_LOG="~/data/log/app.log"
process.sh:echo "Processing ~/data/log/app.log"
script1.sh:Log file: ~/data/log/app.log

En ga na of er geen oude paden meer aanwezig zijn:

dany@pindabook:~/vervang_test$ grep "~/data/logs/app.log" *

Als er geen uitvoer is, is de vervanging gelukt.

Het script:

Je kunt dit script nu op echte bestanden gebruiken.

Voorzorgsmaatregelen voordat je het op echte bestanden uitvoert:

Opruimen