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-Key: 147325

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

Printed on: April 19, 2024 at 12:04 o'clock

Member: micneu
micneu Jul 21, 2010 at 11:43:46 (UTC)
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.
Member: curmudgeon
curmudgeon Jul 21, 2010 at 11:52:30 (UTC)
Goto Top
Hallo micneu.

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

Trotzdem, danke dir sehr!
Mitglied: 77559
77559 Jul 21, 2010 at 13:08:54 (UTC)
Goto Top
Dann versuche mal:
findstr /S /I "\<li.class=\"xyz\"\>[^<]" *.htm

Gruß
LotPings
Member: curmudgeon
curmudgeon Jul 22, 2010 at 10:05:20 (UTC)
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
Mitglied: 77559
77559 Jul 22, 2010 at 11:03:51 (UTC)
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