axi1992
Goto Top

Zeilen in .txt Löschen die einen String enthalten

Ich möchte Logdatein durchsuchen nur haben die ca. 10 Mio. Zeilen.
Nun Möchte ich manche Zeilen die z.B.: "[debug]" oder "**" enthalten aus der Log Datei entfernen und wenn möglich in eine neue Datei speichern.

Ich habe zwar schon ansätze gefunden nur funktioniert das bei mir leider gar nicht.


@echo on & setlocal
set "Pfad=D:\Downloads"
set "Suche=[debug]"

for /f "delims=" %%i in ('findstr /m /b "%Suche%" "%Pfad%\slog0.txt"') do (
type "%%i">%temp%\all.txt
findstr /b /v "%Suche%" "%temp%\all.txt">%temp%\No#.txt && move %temp%\No#.txt "%%i"
)
del "%temp%\all.txt"
del "%temp%\No#.txt"


Das habe ich ausprobiert, funktioniert leider nicht. Muss auch sagen verstehe den Code leider nicht.

Content-Key: 204230

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

Printed on: April 25, 2024 at 21:04 o'clock

Member: Endoro
Endoro Apr 01, 2013 at 12:42:11 (UTC)
Goto Top
Hallo axi1992,

was hälst du davon:
<slog0.txt> newlog.txt findstr /v /l "[debug] **"  
<slog0.txt> exlog.txt findstr /l "[debug] **"  

bb
Member: axi1992
axi1992 Apr 01, 2013 at 12:49:12 (UTC)
Goto Top
Super danke fürs erste:

Leider funktioniert es hier nicht
Zeilen Beispiel:
[01/18/13,16:57:28] [command] [ID: 41] [Name]: /back


<slog0.txt> exlog.txt findstr /l "/back"
Damit bleibt die Datei leer?
Member: rubberman
rubberman Apr 01, 2013 updated at 14:22:39 (UTC)
Goto Top
Hallo axi1992, willkommen im Forum.

Der Slash möchte durch einen Backslash maskiert werden.
findstr /l "\/back"
Warum? Frag mich nicht. Darüber habe ich mir schon mehrfach den Kopf zerbrochen.

Grüße
rubberman
Member: Endoro
Endoro Apr 01, 2013 updated at 18:10:37 (UTC)
Goto Top
Hier "denkt" findstr, die Option "/b" (Zeilenanfang) sei gewählt & meckert über die unbekannten Optionen /a, /c & /k. Kann mit der Option /c: umgangen werden oder so:
<slog0.txt> exlog.txt findstr /l " /back"  
Hier werden (natürlich) auch Zeilen gefunden, wo kein <space> vor "/back" steht. Warum die double quotes den slash nicht escapen: kA. Aber findstr hat reichlich bugs & "features".
Member: florengray
florengray Apr 02, 2013 at 12:19:09 (UTC)
Goto Top
Hi!
Ich würde das mit RegEx lösen. Bei 10 Mio Zeilen...

So auf die Schnelle habe ich mal den RegEx Pattern zusammengeschustert:
(?:.*\[debug\].*)\r\n|(?:.*\*{2}.*)\r\n

Mein Testtext ist folgender:
Zeile mit Kram drin
Zeile mit [debug] drin
Zeile mit was anderen
Zeile mit ** und noch mehr Zeichen
Zeile für das Ende

Wenn ich den Testtext in Notepad++ reinkopiere und bei suchen und ersetzen ->
Suchen nach:
(?:.*\[debug\].*)\r\n|(?:.*\*{2}.*)\r\n
Ersetzen durch:
\0
Suchmodus: Reguläre Ausdrücke -> anhacke

und dann auf [Alle Ersetzen] klicke kommt folgendes raus:
Zeile mit Kram drin
Zeile mit was anderen
Zeile für das Ende

Vielleicht nicht perfekt, aber auch ein Ansatz bzw. Versuch wert.

florengray