#!/bin/bash
#
# Aufruf: alttext neutext datei ...
# Für alle auf der Befehlszeile angegebenen Dateinamen:
# Wenn die Datei wirklich existiert:
# Ersetze im Datei-Inhalt überall alttext durch neutext
# Tipp: Temporäre Datei als Zwischenspeicher nötig
# Alte Datei nur bei Erfolg überschreiben!

if [ $# -lt 3 ]
then
  echo "Usage: $(basename "$0") oldstr newstr file ..." >&2
  exit 2
fi

oldtext="$1"
newtext="$2"
# entferne $1 und $2 von der Befehlszeile,
# sodass $@ nur mehr alle Dateinamen enthält
shift 2

tmp="$(mktemp)"

for f in "$@"
do
    # unser sed kennt die Option -i für das Ändern der Datei "in place"
    # aber -i ist nicht Standard
    # if sed ... nur wenn das sed ohne Fehler gelaufen ist
    if sed "s|$oldtext|$newtext|g" "$f" > $tmp
    then
        mv "$tmp" "$f"
    fi
done
