Shell: Zeile in Datei finden und durch andere Zeile ersetzen ? Zweiter Versuch

Post Reply
Message
Author
eq

Shell: Zeile in Datei finden und durch andere Zeile ersetzen ? Zweiter Versuch

#1 Post by eq »

hi ..
wie kann ich eine ganz bestimmte Zeile in einer Datei finden, und sie dann komplett durch eine andere zeile ersetzen ?

ich brauche dies, da ich in ca. 500 Configfiles nach einer Zeile suchen muß, um sie zu korrigieren.

die Zeile schaut folgendermaßen aus
PRGBATCH = "TRANS/log_`date`" | $PRG";

und soll abgeändert werden in

PRGBATCH = "$TRANS/log/log_`date '+%h%y'`" | $PRG";

diese Zeile gibt es definitiv nur EIN MAL
ich hätte auch kein Problem, wenn diese Dateien dann als neue dateien erzeugt werden ...


danke

Descartes

Zeile in Datei finden und durch andere Zeile ersetzen

#2 Post by Descartes »

probier's mal mit Perl

der Parameter -i.bak legt für jede geänderte Datei ein Backup (*.bak Datei) an

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
perl -np -i.bak -e 's#PRGBATCH = "TRANS/log_`date` \| \$PRG";#PRGBATCH = "\$TRANS/log/log_`date +\"%h%y\"` \| \$PRG";#' *.conf

kombiniert mit find:

find . -type f -name "*.conf" | xargs perl -np -i.bak -e 's#PRGBATCH = "TRANS/log_`date` \| \$PRG";#PRGBATCH = "\$TRANS/log/log_`date +\"%h%y\"` \| \$PRG";#'
</font><hr></pre></blockquote>

Descartes

Nachtrag (weil halt nur ein \[code\] Abschnitt geht)

#3 Post by Descartes »

Den Parameter -i brauchst du auf jeden Fall auch wenn du die Backup-Dateien nicht haben möchtest

Für den Fall dass du direkt ohne ein Sicherungsdatei (*.bak) direkt die Dateien ändern möchtest dann muss du den Parameter -i ohne das ".bak" verwenden:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
perl -np -i -e 's#PRGBATCH = "TRANS/log_`date` \| \$PRG";#PRGBATCH = "\$TRANS/log/log_`date +\"%h%y\"` \| \$PRG";#' *.conf

kombiniert mit find:

find . -type f -name "*.conf" | xargs perl -np -i -e 's#PRGBATCH = "TRANS/log_`date` \| \$PRG";#PRGBATCH = "\$TRANS/log/log_`date +\"%h%y\"` \| \$PRG";#'

</font><hr></pre></blockquote>

Hey

Re: Shell: Zeile in Datei finden und durch andere Zeile ersetzen ?

#4 Post by Hey »

Nicht auf der Shell, aber auch nützlich für diesen Zweck:

http://kfilereplace.sourceforge.net/

Post Reply