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
Suchstring in textdateien ersetzen
Re: Suchstring in textdateien ersetzen
Die m.E. einfachste Lösung ist ein Mini-Perlskript:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">perl -p -i.bak -e 's/\<!--no-->$action/$useraktion/g' datei1 datei2 ...</font><hr></pre></blockquote>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:<pre>find . -name "*.sh" -print0 | xargs -0 perl ...</pre>Damit würdest Du ab dem Arbeitsverzeichnis alle Dateien, die auf .sh enden, bearbeiten.
Jochen
Jochen
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
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
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):<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">find . -name "*.pl" -print0 | xargs -0 perl -p -i.bak -e 's/\<!--no-->$action/\<!--no-->$useraktion/g'</font><hr></pre></blockquote>Nochmal aufgedröselt:
<li> find sucht ab dem aktuellen Arbeitsverzeichnis (.) alle Dateien, deren Name auf .pl endet (-name "*.pl").
<li> Diese gibt er mittels NUL-Byte terminiert aus, damit Lehrzeichen im Namen nicht stören können (-print0).
<li> xargs nimmt diese Liste von Dateinamen entgegen; "-0" sagt ihm, das die Einträge NUL-terminiert sind.
<li> Aus den Dateinamen baut xargs eine Parameterliste für das perl-Kommando.
<li> perl wird ein Suchen & Ersetzen (-e '...') innerhalb der angegebenen Dateien (-i) machen, zur Sicherheit aber vorher Kopien der Ursprungsdateien mit der Endung anlegen.
<li> Die Option "-p" bewirkt, dass perl jede Zeile jeder Datei einliest, das Substitute-Kommando darauf ausführt und jede Zeile dann wieder ausgibt.
So, <i>jetzt</i> muss es aber funktionieren! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Jochen
<li> find sucht ab dem aktuellen Arbeitsverzeichnis (.) alle Dateien, deren Name auf .pl endet (-name "*.pl").
<li> Diese gibt er mittels NUL-Byte terminiert aus, damit Lehrzeichen im Namen nicht stören können (-print0).
<li> xargs nimmt diese Liste von Dateinamen entgegen; "-0" sagt ihm, das die Einträge NUL-terminiert sind.
<li> Aus den Dateinamen baut xargs eine Parameterliste für das perl-Kommando.
<li> perl wird ein Suchen & Ersetzen (-e '...') innerhalb der angegebenen Dateien (-i) machen, zur Sicherheit aber vorher Kopien der Ursprungsdateien mit der Endung anlegen.
<li> Die Option "-p" bewirkt, dass perl jede Zeile jeder Datei einliest, das Substitute-Kommando darauf ausführt und jede Zeile dann wieder ausgibt.
So, <i>jetzt</i> muss es aber funktionieren! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Jochen