curmudgeon
Goto Top

(Bash) mehrere htm-Dateien nach Muster durchsuchen - Ergebnis in Liste speichern

Guten Tag Community! Ich würde mich sehr über ein wenig Hilfe bei meinem Problem freuen.

In einem Ordner befinden sich mehrere 100 .htm Dateien.

Diese enthalten ordnungsgemäß immer mal wieder den String:
"<li class="xyz"><a id="

Jetzt kommen da immer wieder einige hinzu/werden geändert und es kann passieren, dass sie sich so lesen:
"<li class="xyz">TEXT"

Ich bräuchte also ein Batch Skript (Windows XP/7), dass die .htm Dateien ausliest und nach dem Muster "<li class="xyz">" sucht und überprüft, ob es danach mit einem "<" weitergeht. Ist dies nicht der Fall, müsste der Dateiname in eine Liste, quasi eine Überprüfungsliste.

Leider bin ich in Batch absolut neu und würde mich sehr sehr freuen, falls mir hier jemand einen Code-Anstoß geben könnte.

Schonmal vielen Dank und viele Grüße

Content-ID: 147325

Url: https://administrator.de/forum/bash-mehrere-htm-dateien-nach-muster-durchsuchen-ergebnis-in-liste-speichern-147325.html

Ausgedruckt am: 04.04.2025 um 18:04 Uhr

micneu
micneu 21.07.2010 um 13:43:46 Uhr
Goto Top
kann es auch mit tools aus der linux welt gehen?
grep -r "\<li class=\"xyz\"\>.*\<" *.htm

so oder ähnlich das sollte dir alles finden was diesen string hat und den datei namen und die zeile anzeigen.
curmudgeon
curmudgeon 21.07.2010 um 13:52:30 Uhr
Goto Top
Hallo micneu.

Leider muss ich auf alles aus dem Linux-Werkzeugkasten verzichten.

Trotzdem, danke dir sehr!
77559
77559 21.07.2010 um 15:08:54 Uhr
Goto Top
Dann versuche mal:
findstr /S /I "\<li.class=\"xyz\"\>[^<]" *.htm

Gruß
LotPings
curmudgeon
curmudgeon 22.07.2010 um 12:05:20 Uhr
Goto Top
Vielen vielen Dank LotPings, damit konnte ich das Problem lösen!

Nun werde ich mir die Syntax noch genau anschauen, dass ich nicht nur kopiere sondern das nächste Mal so etwas schon selbst hinbekomme.

Viele Grüße
77559
77559 22.07.2010 um 13:03:51 Uhr
Goto Top
Prima, dann hier noch ein paar Erläuterungen:
  • Findstr arbeitet standardmäßig im RegEx Modus, das Leerzeichen zwischen li und class habe ich deshalb gegen einen Punkt (=beliebiges Zeichen) ausgetauscht da sonst 2 unabhängige mit oder verknüpfte Suchbegriffe angenommen würden.
  • /S = Rekursiv
  • /i = ignoriere Gross-/Kleinschreibung
  • Der Backslash dient zum Escapen der Sonderfunktion von < (=Wortanfang) , " (=Ende des Suchbegriffs)
  • Die eckigen Klammern stellen eine Klasse von Zeichen dar, das erste Zeichen ^ negiert die Klasse, [^<] bedeutet also alle Zeichen die NICHT "<" sind.

Gruß
LotPings