hallo, gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen? gruss, mario
Moin,
Benutz mal bitte vernünftige Groß- und Kleinschreibung.
* Mario Duve
gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen? Ja, mit find(1) und sed(1). find . -type f -exec sed <irgendwas> {} \;
Thorsten -- Why waste time learning, when ignorance is instantaneous? - Calvin
On Monday 06 May 2002 23:53, Mario Duve wrote:
hallo,
gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen?
gruss, mario
Eine schnelle Lösung, für den Fall, dass es sich um Ascii Dateien handelt. Ich würde Dir empfehlen erst einmal einige der Dateien in ein Testverzeichnis zu kopieren und dort das Ersetzen zu testen. ---8<--- #!/bin/bash # # filename: changestring # created: 05-may-02 # author: MeMyselfI # last changed: 05-may-02 # tested: ~ fair # # summary # ------- # replaces StringOld by StringNew # in files matching the pattern Fpatt # begin search in Directory # # variables # --------- # Directory : Verzeichnis in dem mit der Suche begonnen wird # Fpatt : Dateimuster nach dem gesucht wird # StringOld : Begriff der gesucht wird # StringNew : Begriff der eingefügt wird # # Check for proper no. of command line args. if [ $# -ne 4 ] then echo "Usage: $(basename $0) /path *filepattern stringold stringnew " exit 1 fi Directory=$1 echo "Start searching from Directory : "$Directory Fpatt=$2 echo "Searching for files matching pattern: "$Fpatt StringOld=$3 echo "Searching for string: "$StringOld StringNew=$4 echo "Replace with new string: "$StringNew echo echo "Creating backup files and replacing strings" echo for file in $(find $Directory -iname $Fpatt) #Traverse all matching $Fpatt files in $Directory do echo "$file -> $file.bak" cp $file $file.bak cat $file | sed -e s/$StringOld/$StringNew/g >$file.tmp mv "$file.tmp" "$file" done echo echo "Yeeeooow, finished" echo ---8<--- Das Script kann noch verbessert werden. - Vergleichen ob bereits *.bak Dateien existieren und wenn ja dann eine andere Dateinamenserweiterung für eine Sicherung der Daten vornehmen. Oder die Sicherungsdateien mit einem Datum versehen. Oder noch besser, die Daten in ein extra angelegtes Verzeichnis kopieren. - Eine Logdatei erstellen die den Ablauf protokolliert. - ... tbc Aufruf des Skriptes mit 4 Parametern, Verzeichnis, Dateimuster, Suchstring, Ersatzstring. Ein starten des Skriptes ohne oder mit ungleich 4 Parametern führt zu einer kurzen Meldung und einem Abbruch. Ich hoffe ich hab keinen Fehler übersehen *schwitz* Zum schmökern empfehle ich file:/usr/share/doc/howto/en/html_single/Adv-Bash-Scr-HOWTO.html besonders die Beispielscripte sind für den Anfang eine gute Orientierung. Tschüss, Thomas p.s. Sorry hab die Mail zuerst per pm verschickt
Hallo, On Tue, 07 May 2002, Thomas Templin wrote:
Directory=$1 echo "Start searching from Directory : "$Directory Fpatt=$2 echo "Searching for files matching pattern: "$Fpatt StringOld=$3 echo "Searching for string: "$StringOld StringNew=$4 echo "Replace with new string: "$StringNew
Wuerde ich umsortieren und v.a. quoten, sonst haut's dich schon bei nem Leerzeichen im Dateinamen "weg" ;) ==== Directory="$1" Fpatt="$2" StringOld="$3" StringNew="$4" echo "Start searching from Directory : '$Directory'" echo "Searching for files matching pattern: '$Fpatt'" echo "Searching for string: '$StringOld'" echo "Replace with new string: '$StringNew'"
for file in $(find $Directory -iname $Fpatt) #Traverse all matching $Fpatt files in $Directory do echo "$file -> $file.bak" cp $file $file.bak
s. den anderen Thread... und wieder quoten! Hier wuerde ggfs. ne Option '-i' passen... find "$Directory" -name "$Fpatt" -print | \ while read file; do echo "making backup: $file -> $file.bak" cp -i "${file}" "${file}.bak"
cat $file | sed -e s/$StringOld/$StringNew/g >$file.tmp
s.a.T (verd. Deja Vu!): sed "s/$StringOld/$StringNew/g" < "${file}.bak" > "${file}"
mv "$file.tmp" "$file" done
dito. -dnh --
Der Thomas, grundsaetzlich mit abgeklemmten Boxen surfend Jajaj! Nur so überlebt das Trommelöfell. [Thomas Kranke und Woko° in dag°]
On Mon, 2002-05-06 at 23:53, Mario Duve wrote:
hallo,
gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen?
aus meiner Einzeilersammlung: find . -type f -name "*.html" -exec perl -p -i.bak -e 's/altes\sWort/neues\sWort/g' {} \; Erklärung: Findet im aktuellen Verzeichnis und allen Unterverzeichnissen allen Dateien *.html und ersetzt in diesen Dateien "altes Wort" mit "neues Wort". Zusätzlich wird eine *.html.bak Datei angelegt. HTH Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
Hi, On Monday, May 06, 2002 at 23:53:19, Mario Duve wrote:
gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen?
for i in *; do mv $i `echo $i | sed/d/f/`; done Henne -- Hendrik Vogelsang aka Henne mailto: hvogel<at>hennevogel.de I am Jack's raging bile duct. # random sigs made with fortune
On Tuesday 07 May 2002 18:29, Henne Vogelsang wrote: [...]
On Monday, May 06, 2002 at 23:53:19, Mario Duve wrote:
gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen?
for i in *; do mv $i `echo $i | sed/d/f/`; done Ähh, ersetzt das nicht nur d durch f in den Datei_namen_? Ich hatte das jetzt so verstanden, dass in den Dateien ein Suchstring ersetzt werden sollte. Tschüss, Zhomas
Hi, On Tuesday, May 07, 2002 at 19:11:36, Thomas Templin wrote:
On Tuesday 07 May 2002 18:29, Henne Vogelsang wrote:
On Monday, May 06, 2002 at 23:53:19, Mario Duve wrote:
gibt es eine möglichkeit, in allen dateien inerhalb eine verzeichnisses nach einem wort zu suchen, z.B xx-xxxx.d und dieses durch xxxx.f zu ersetzen?
for i in *; do mv $i `echo $i | sed/d/f/`; done Ähh, ersetzt das nicht nur d durch f in den Datei_namen_? Ich hatte das jetzt so verstanden, dass in den Dateien ein Suchstring ersetzt werden sollte.
Stimmt. Mein Fehler. Sorry. Henne -- Hendrik Vogelsang aka Henne mailto: hvogel<at>hennevogel.de The condom is the glass slipper of our generation. You slip it on, you dance the night away with a stranger, and then you throw it away. # random sigs made with fortune
participants (6)
-
David Haller
-
Henne Vogelsang
-
Mario Duve
-
Thomas Templin
-
Thorsten Haude
-
Volker Kroll