micneu
Goto Top

windows, sed, grep - suchen und ersetzen in dateien batch im verzeichnis rekursiv

Hallo Leute,

Ich benötige euere unterstützung.
Ich muß in einigen *.ini Dateien nach bestimmten wörtern suchen und die *.ini Dateien liegen alle in verschachtelten verzeichnissen.
Das suchen und erstezen will ich in einerm BATCH erledigen das es auf ca. 50 Computern gemacht werden muß ;-(
Das ganze sind windows rechner.
Habt ihr eine Idee wie ich es mit Board mitteln am windows rechner machen kann, habe auch versucht mit sed und grep zu machen.

habe versucht mit sed und grep aber kein erfolg.

grep:

damit bekomme ich schonmal den pfad der dateien:

grep -r -l FileMax= *

sed:

hiermit bekomme ich wenn ich im verzeichnis der datei bin die richtige zeiler ausgegeben:

sed -n "/40000/p" *.ini  

habe es versucht mit einer for schleife:

for /R %cd% %f in (*.ini) do sed -n "/40000/p %f  

oder mit einer kombination von GREP und SED:

grep -r -l FileMax= B* | sed -n "/FileMax=/p"  

nur bekomme ich keine ausgabe.

wie könnte ich sowas "einfach" lösen????

hoffe mir kann jemand helfen.

Content-Key: 114184

Url: https://administrator.de/contentid/114184

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: Biber
Biber 19.04.2009 um 01:32:04 Uhr
Goto Top
Moin micneu,

ich bin noch etwas unsicher, ob Du
  • Dich im Moment auf das Suchen der relevanten beschränken willst
  • oder tatsächlich bestimmte Zeilen ersetzen willst
  • und falls ja, ob Du das per Cmd-Prompt oder per Batch abfackeln willst.
Irgenwie passen die Ankündigungen in Deinem Beitrag (Suchen und Ersetzen per Batch) und die Beispielzeilen (Anzeigen der Fund-Zeilen mit Zeilennummer per CMD-Line) nicht so ganz übereinander.

Also: Kompromissangebot.
Wenn Du vom CMD-Prompt aus mit einer Kombination von FOR /R und Sed diese FileMax-Einträge ersetzen willst, dann
FOR /R . %f in (*.ini) do Sed -e 's/FileMax=.*/FileMax=1234/g' "%f"  
Ungetestet, aber soll gemäß Plan bewirken
FOR /R . %f in (*.ini) do
---> Allen *.ini-Dateien, im folgenden %f genannt, unterhalb des aktuellen Verzeichnisses, tue folgendes an
Sed -e 's/FileMax=.*/FileMax=1234/g' "%f"
--> -e editiere
--> und zwar switche/ersetze alle Strings "FileMax=beliebige Zeichen" durch "FileMax=1234
-->und zwar in allen Dateien "%f", die ich in Hochkomma gesetzt habe, falls Leerzeichen in Pfad oder Dateinamen sind.

Falls Du mehrere (verschiedene) Zeilen ersetzen willst, dann solltest Du die ganzen einzelnen AlteZeile/NeueZeile-Anweisungen in eine separate Textdatei schreiben und sed mit Parameter -f Textdateiaufrufen.

Grüße
Biber
Mitglied: miniversum
miniversum 19.04.2009 um 10:02:44 Uhr
Goto Top
Wenn es mit Boardmitteln erledigt werden soll kannst du aber sed nicht verwenden. Oder ist das auf allen Rechnern vorhanden? Sonst entweder das sed umgehen mit Boardmitteln oder als exe mitliefern.
Mitglied: Biber
Biber 01.05.2009 um 18:21:00 Uhr
Goto Top
Moin micneu,

besteht Deinerseits noch Interesse an diesem Beitrag oder soll ich den zu den anderen ungeklärten Fällen umbetten?

Grüße
Biber
Mitglied: micneu
micneu 04.05.2009 um 17:27:18 Uhr
Goto Top
Danke ich habe die Lösung.....

FOR /R . %%f in (*ons.ini) do Sed -i.bak "s/FileMax=200000/FileMax=40000/g;s/Preserved=1Preserved=0/g" "%%f"


danke .....