Ergebnis 1 bis 8 von 8

Thema: Textdatei Zeilen löschen Batch

  1. #1
    sglatschtglei Avatar von M315T3R
    Registriert seit
    Jul 2013
    Ort
    Braunes Sachsen
    Beiträge
    156

    Textdatei Zeilen löschen Batch

    Moin Moin!

    Ich habe eine *.txt Datei mit ca. 50.000 Wörten. Jedes Wort auf einer Zeile. Es ist eine Passwortliste.

    Das Problem ist, ich möchte alle Wörter mit weniger als 8 Zeichen und mit mehr als 15 Zeichen löschen.

    Hat da jemand eine Idee?

    THX!

  2. #2
    sglatschtglei

    (Threadstarter)

    Avatar von M315T3R
    Registriert seit
    Jul 2013
    Ort
    Braunes Sachsen
    Beiträge
    156

    Re: Textdatei Zeilen löschen Batch

    Gerade mit Wildcards getestet - mit Notepad und Ultraedit.
    ******** konnte nicht gefunden werden.

  3. #3
    Team ModMii Avatar von Timon3
    Registriert seit
    Jul 2013
    Beiträge
    498

    Re: Textdatei Zeilen löschen Batch

    Muss es Batch sein? Mit Node könnte man das in wenigen Zeilen lösen.

  4. #4

    Re: Textdatei Zeilen löschen Batch

    Das scheint was mit Javascripts zu sein.

  5. #5

    Re: Textdatei Zeilen löschen Batch

    Ich würde (wenn ich es denn unter Windows machen müsste) wie folgt vorgehen:
    Notepad++
    Dort
    suchen -> hervorheben (lesezeichen setzen, reguläre ausdrücke)->^.{8,15}$

    suchen -> lesezeichen -> zeilen ohne lesezeichen löschen.
    Für diesen Beitrag bedankt sich alter_Bekannter
    Gruß
    braegler

  6. #6
    Temporär Suspendiert :D Avatar von KcDaRookie
    Registriert seit
    Jul 2013
    Beiträge
    278

    Re: Textdatei Zeilen löschen Batch

    Wenn du AHK hast geht dieses Script. Die Datei input.txt benennen und im selben Ordner haben beim ausführen:
    Code (AutoIt):
    1. #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
    2. ; #Warn  ; Enable warnings to assist with detecting common errors.
    3. SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
    4. SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
    5.  
    6. Loop, read, input.txt
    7. {
    8. if StrLen(A_LoopReadLine) > 7 && StrLen(A_LoopReadLine) < 15
    9. FileAppend,
    10. (
    11. %A_LoopReadLine%
    12.  
    13. ), output.txt
    14. }
    Am Ende hast du dann die gefilterte output.txt, die Originale bleibt unberührt.
    Die letzte Zeile ist eine leere, liegt an der Natur des Scripts.

    Ich hab dir das Script mit der AHK.exe mal angehangen.
    Ansonsten gibts AHK hier: https://autohotkey.com/download/
    Angehängte Dateien Angehängte Dateien
    Für diesen Beitrag bedankt sich M315T3R
    Was Microsoft außer Windows und Office noch zu bieten hat.
    Die Kunst das letzte Wort zu haben.
    Die Wahrscheinlichkeit das keine Antwort mehr nach meinem Post kommt liegt bei 80% ^^

    R.I.P. Gulli *6. November 1998 - † 01. Juli 2013

  7. #7
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    5.498
    ngb:news Artikel
    16

    Re: Textdatei Zeilen löschen Batch

    Hier 2 Lösungen in Powershell - das geht in jedem aktuellen Windows und ist deutlich flotter und schöner als Batch

    Lösung 1 ist etwas simpler:

    Code (PowerShell):
    1. (Select-String -Path C:\uniqpass.txt -Pattern '.{8,15}').Line | Set-Content -Path c:\out.txt
    Diese Lösung benötigt für ~2Mio Passwörter (ca. 20mb) 55 Sekunden

    Lösung 2 ist leicht umfangreicher aber schneller:

    Code (PowerShell):
    1. $out = New-Object System.Collections.Generic.List[System.Object]
    2. foreach ($line in [System.IO.File]::ReadAllLines('C:\uniqpass.txt'))  {
    3.  if ($line -match '.{8,15}') {$out.Add($line)}
    4. }
    5. Set-Content -Value $out.ToArray() -Path c:\out2.txt
    25 Sekunden - also etwas unter der hälfte. Liegt vor allem an der Referenz auf die .NET Funktion zum lesen der Datei.

    Beide Scripte kannst du in eine .ps1 speichern, Pfade anpassen und rechtsklick > ausführen als Powershell.
    Dabei musst du im Standard eine Nachfrage bestätigen die nur verhindert das man ein solches Script nicht ausversehen ausführt.
    Wenn du diese Sicherung ausschalten möchtest dann geht das indem du die powershell-console auf machst (Windows-Taste + R > powershell.exe) und dort "set-executionpolicy unrestricted" eingibst und den Anweisungen folgst.

    Edit:
    Habe noch eine Lösung 3 als Batch von einer guten Seele schreiben lassen... Laufzeit 25 Minuten
    Code (Bash):
    1. @echo off
    2. SetLocal ENABLEDELAYEDEXPANSION
    3. del out.txt >nul: 2>&1
    4. For /f %%a in (uniqpass.txt) do @(
    5.      Set _X1=&Set _X2=
    6.      Set _x1=%%a
    7.      if not "!_x1:~7,1!" == "" Set _x2=!_x1!
    8.      if "!_x2:~15,1!" == "" Echo !_x2! >> out.txt
    9. )
    Für diesen Beitrag bedanken sich M315T3R, Kenobi van Gin
    Geändert von drfuture (12.05.18 um 13:42 Uhr)
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  8. #8
    sglatschtglei

    (Threadstarter)

    Avatar von M315T3R
    Registriert seit
    Jul 2013
    Ort
    Braunes Sachsen
    Beiträge
    156

    Re: Textdatei Zeilen löschen Batch

    Rückmeldung:
    Ich hab das Script von KcDaRookie: probiert. Klappt wunderbar!

    THX @All!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •