Hi Leutz,

Da ich in die Verlegenheit gekommen war in weit mehr als 100 Dateien einen bestimmten Ausdruck gegen einen anderen auszutauschen, habe ich mich gefragt, wie man das automatisieren könnte.
Der Computer kann das sicher wesentlich besser und schneller als ein Mensch das jemals alleine hinbekommen könnte.
Die entsprechenden Werkzeuge dafür bringt die Bash bereits mit.
Alles was man dazu installiert haben sollte, ist test, echo, cat, sed und rm. Also alles Standardtools, von denen die meisten nicht mal wissen, dass sie da sind, weil sie entweder ganz automatisch benutzt werden oder weil sie eher selten genutzt werden.

Das Script ist in der Handhabung recht einfach zu bedienen. Der erste Parameter ist der ausdruck, der ausgetauscht werden soll, der zweite Parameter ist der Ausdruck, der für den alten Ausdruck eingesetzt werden soll und als drittes kommt der Dateiname in dem der Ausdruck zu finden sein soll.
Das klingt vlt. zuerst ein wenig kompliziert, ist aber vom Prinzip her recht simpel.
Wir nehmen an, dass sich irgendwo in einer Datei namens testfile ein Ausdruck namens foobar befindet. Der Ausdruck foobar gefällt uns nicht mehr. wir würden gerne barfoo an deren Stelle stehen haben. Dann rufen wir das Script folgendermaßen auf:
Code:
./replace.sh foobar barfoo testfile
Dann wird der Ausdruck foobar in der Datei gegen barfoo ausgetauscht.

Man kann auch Ausdrücke mit mehr als einem Wort austauschen. Dazu muß man dann Sonderzeichen oder Leerzeichen entweder mit Escape-Zeichen (\) vorbehandeln oder den ganzen Ausdruck in einfache Anführungsstriche setzen.
Gleiches gilt, wenn man solche Zeichen im Dateinamen hat. Zum Beispiel, wenn man ein * nutzt.

Das Script ist so konzipiert, dass man mehr als eine Datei gleichzeitig bearbeiten kann. Einzige Bedingung ist, dass die Dateien im selben Verzeichnis liegen und dass man sie über * auf einmal aufrufen kann. Zum Beispiel, wenn alle Dateien die Endung *.txt besitzen.

So. Genug der Erklärungen. Das Script werde ich einmal in eine Code-Zelle packen und auch zum Download als Attachement anbamseln.

Code:
#!/bin/bash
#this script changes an expression in a text file against another one
if [ "$#" -gt 3 ] ; then
echo -e "\aError!\nIf you have white spaces or other special characters as for example * in one of the expressions or in the filename, please use \ in front of the special characters or write the complete expression or filename in single quotes.\nthx\n"
exit 2
elif [ "$#" -gt 2 ] ; then
WRONG_EXPRESS=$1
NEW_EXPRESS=$2
FOO=$3
echo "s#$WRONG_EXPRESS#$NEW_EXPRESS#" > ./expressions.txt
echo $BAR
for i in $FOO; do
    cat $i | sed  -f expressions.txt > $i
done
rm ./expressions.txt
exit 0
else
echo -e "\aError\nNot enough Parameters.\nUsage\n\t$0 expression new_expression file\n"
exit 1
fi