ubuntuusers.de

advanced search and replace

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

steffmeister

Avatar von steffmeister

Anmeldungsdatum:
5. April 2005

Beiträge: 403

Wohnort: St. Valentin (Ö)

hi

ich bin auf der suche nach einem programm (oder skript), das mir in dateien einen suchbegriff durch einen anderen begriff ersetzt (sprich: search and replace).
das "anspruchsvolle" dabei is aber, dass ich diesem programm gerne einen ordner mit unterordnern übergeben will und das programm natürlich alle dateien in sämtlichen unterordnern durchgeht und da eben dieses search and replace macht...

ich hab zwar das programm "sed" gefunden, scheint aber diese ordnersache nicht zu unterstützen (sondern immer nur eine datei)...

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

Hi,
also sed ist doch schon mal nicht schlecht.
Für die Unterverzeichnisse brauchst du noch find.

Ich verwende zum Beispiel folgendes kleine Skript um alle Tabs in allen .f90 Dateien im übergebenen Verzeichnis durch vier Leerzeichen zu ersetzen:

#!/bin/sh
echo 'removing all TABS from the following files:'
find $1 -iname "*.f90" -type f -print
find $1 -iname "*.f90" -type f -print0 | xargs -0 sed -i -e 's/\t/    /g'

Die erste Zeile dient nur als Kontrollausgabe. Das eigentliche Skript, dass du suchst ist die zweite Zeile, die mit find anfängt. In der Konsole als einzelnen Befehl einfach das $1 durch den Pfad ersetzen. 8)

Wenn das Skript rmtabs heißt, kann man es dann durch

rmtabs /Pfad


über einen bestimmten Pfad laufen lassen.

Ich hoffe etwas in der Art hast du dir vorgestellt 😉

JuergenF

Anmeldungsdatum:
22. Oktober 2004

Beiträge: 2009

Wohnort: FFM

Jo, mehrere Befehle kombinieren ist Unixig ☺

In http://www.debian-administration.org/articles/197 gibts noch ein paar Anregungen zum multiplen Ersetzen.
Wenn Du es ganz einfach haben willst, kannst Du ja evtl. das erwähnte 'rpl' installieren.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

haraldkl hat geschrieben:

#!/bin/sh
echo 'removing all TABS from the following files:'
find $1 -iname "*.f90" -type f -print 
find $1 -iname "*.f90" -type f -print0 | xargs -0 sed -i -e 's/\t/    /g'

Und wieso nicht:

#!/bin/sh
echo removing all TABS from the following files:
find $1 -iname "*.f90" -type f -exec sed -i -e 's/\t/    /g' {} \; -print

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

tja wieso nicht 😕
Wahrscheinlich hatte ich wie ich das skript geschrieben hatte versucht die Sache mit dem xargs rauszufinden 😉
Oder ich dachte es wäre mit Pipe ein wenig übersichtlicher, keine Ahnung.

Also wegen mir dann eben so:

find $1 -iname "*.f90" -type f -exec sed -i -e 's/\t/    /g' {} ; -print

Vielleicht findest du ja auch noch andere tolle Möglichkeiten, dein System, deine Wahl...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Wer sucht der findet.
Ich wollte vor allem hören, ob Du vielleicht einen Grund hast, nicht '-exec' zu verwenden, ob 'xargs' vielleicht seltene Probleme umgeht.

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

user unknown hat geschrieben:

ob Du vielleicht einen Grund hast, nicht '-exec' zu verwenden, ob 'xargs' vielleicht seltene Probleme umgeht.

Nicht das ich wüsste, -print0 umschifft Probleme mit eigenartigen Dateinamen, aber das sollte durch die Verwendung von -exec ja sowieso hinfällig sein. Wenn find selbst stolpert, nutzt auch meine Konstruktion nix 🙄

Also bleibt es wohl Geschmackssache 8)

Die Verwendung von xargs ist vielleicht ein wenig allgemeiner, schließlich hat nicht jeder Befehl eine exec Option. 😉

steffmeister

(Themenstarter)
Avatar von steffmeister

Anmeldungsdatum:
5. April 2005

Beiträge: 403

Wohnort: St. Valentin (Ö)

hi

danke leute, das programm rpl macht genau das was ich wollte...

Antworten |