Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Suchstring in textdateien ersetzen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
eq
Gast





BeitragVerfasst am: 10. Jan 2003 2:13   Titel: Suchstring in textdateien ersetzen

hi ...

ich habe ca. 35 verschiedene Textdateien.

in allen steht irgendwie der string "$action" ... nun möchte ich diesen string (da er nicht benutzt werden darf) durch "$useraktion" ersetzen.

im vi kenne ich

1,$s/$action/$useraktion/g

wie sähe das in ner (z.Bsp.) while-schleife aus ? .. mit sed ?

danke für Hilfe
 

Jochen
Gast





BeitragVerfasst am: 10. Jan 2003 8:05   Titel: Re: Suchstring in textdateien ersetzen

Die m.E. einfachste Lösung ist ein Mini-Perlskript:
code:
perl -p -i.bak -e 's/\$action/$useraktion/g' datei1 datei2 ...
perl arbeitet in-place, legt aber vor dem Suchen und Ersetzen in der Datei eine Sicherungskopie mit Endung .bak an (-i.bak). Die Liste der benötigten Dateien lässt sich leicht mittels find und xargs zusammenstellen:
find . -name "*.sh" -print0 | xargs -0 perl ...
Damit würdest Du ab dem Arbeitsverzeichnis alle Dateien, die auf .sh enden, bearbeiten.

Jochen
 

eq
Gast





BeitragVerfasst am: 14. Jan 2003 21:48   Titel: Re: Suchstring in textdateien ersetzen

hi .. .
ich habe alles versucht, aber es tut sich mit diesem befehl nichts ....
er scheint zwar zu arbeiten eine Zeit lang, aber er ändert nichts
ich glaube, mein Problem liegt an der Zusammenstellung mit find

eq
 

Jochen
Gast





BeitragVerfasst am: 15. Jan 2003 8:25   Titel: Re: Suchstring in textdateien ersetzen

OK, ich habe es selbst noch mal versucht; das Problem liegt wohl darin, dass perl eine Zeichenkette, die mit "$" beginnt, auch in Regulären Ausdrücken als skalare Variable aussieht. Folgendes Kommando funktioniert einwandfrei (gerade selbst getestet):
code:
find . -name "*.pl" -print0 | xargs -0 perl -p -i.bak -e 's/\$action/\$useraktion/g'
Nochmal aufgedröselt:
  • find sucht ab dem aktuellen Arbeitsverzeichnis (.) alle Dateien, deren Name auf .pl endet (-name "*.pl").
  • Diese gibt er mittels NUL-Byte terminiert aus, damit Lehrzeichen im Namen nicht stören können (-print0).
  • xargs nimmt diese Liste von Dateinamen entgegen; "-0" sagt ihm, das die Einträge NUL-terminiert sind.
  • Aus den Dateinamen baut xargs eine Parameterliste für das perl-Kommando.
  • perl wird ein Suchen & Ersetzen (-e '...') innerhalb der angegebenen Dateien (-i) machen, zur Sicherheit aber vorher Kopien der Ursprungsdateien mit der Endung anlegen.
  • Die Option "-p" bewirkt, dass perl jede Zeile jeder Datei einliest, das Substitute-Kommando darauf ausführt und jede Zeile dann wieder ausgibt.

    So, jetzt muss es aber funktionieren!

    Jochen
  •  

    Beiträge vom vorherigen Thema anzeigen:   
         Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
    Seite 1 von 1

     
    Gehen Sie zu:  

    Powered by phpBB © phpBB Group
    pro_linux Theme © 2004 by Mandaxy