Dateiübergreifendes ersetzen von Wörtern

xtratz

Gesperrt
Hallo Leute,

ich müsste in einem Verzeichnis bei ca. 200 Textdateien, in jeder Datei ein bestimmets Wort austauschen.

Kann ich das irgendwie über einen Konsolenbefehl Managen oder muss ich jede Datei einzeln öffnen ?!.

Gruss
 
Hi.

Das kannst du natürlich ganz schnell mit einem Shell-Skript erledigen:
Bash:
Code:
for i in <DATEIEN>; do
  sed -e 's,<WORT>,<ERSATZ>,g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
done

<DATEIEN> sind die Dateien in denen du die Ersetzung vornehmen willst (z.B. *.txt oder a*.doc)
<WORT> ist das Wort was du ersetzen willst (Spezialzeichen solltest du mit einem Backslash zitieren)
<ERSATZ> bezeichnet das Ersatzwort

Wenn du erstmal ausprobieren willst, was überhaupt ersetzt wird, ersetze erstmal die sed-Zeile oben durch
Code:
sed -ne 's,<WORT>,<ERSATZ>,gp' "$i"
 
Mit welcher Shell führst du denn das Skript aus? Du verwendest doch nicht etwa die (t)csh, oder?

Am besten ist es den Interpreter in der ersten Zeile eines Skripts nach dem sogenannten Shebang anzugeben.

Code:
#!/bin/sh

for i ...
 
Ja danke das hat jetzt geklappt.

Eine Frage noch, geht das auch irgendwie für Unterordner.
Sodass wirklich alle Dateien und Unterordner mit geändert werden ?!

Gruss
 
Zuletzt bearbeitet:
Ja, das Skript kann man auch für Unterordner erweitern:
Code:
#!/bin/sh

if [ $# -ne 2 ]; then
  echo "usage: $0 <DIR> <PATTERN>" >&2
  exit 1
fi

# /edit: variable "line" sollte "i" heißen  :-( 
find "$1" -name "$2" | while read i; do
  if [ -e "$i.tmp" ]; then
    echo "$0: temp file already exists, not overwriting: $i.tmp" >&2
  else
    sed -e 's,$HTTP_GET_VARS,$_GET,g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
  fi
done

Aufrufen kannst du das Skript dann z.B. so:
Code:
./ersetze_GET.sh /foo/bar '*.php'

Das Skript muß jetzt mit 2 Parametern aufgerufen werden, dem Verzeichnis in dem alle Dateien rekursiv bearbeitet werden sollen und dann das Muster mit dem die Dateien übereinstimmen müssen.

Außerdem wird die Ersetzung nur durchgeführt wenn nicht bereits eine temporäre Datei existiert damit keine Dateien verloren gehen können.
 
Zuletzt bearbeitet:
Zurück