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
Shell: Zeile in Datei finden und durch andere Zeile ersetzen ? Zweiter Versuch
Zeile in Datei finden und durch andere Zeile ersetzen
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>
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>
Nachtrag (weil halt nur ein \[code\] Abschnitt geht)
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>
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>