BatchRex - Regular Expressions in Batch nutzen (oder: Wie extrahiert man bestimmten Text)
Da hier des öfteren Fragen in der Art "wie kann ich den String XY aus einem Text extrahieren" auftauchen, habe ich mich mal hingesetzt und ein Tool entwickelt das echte Regular Expressions in einer Batchdatei möglich macht. Ich nenne es mal passend : BatchRex.
Für all diejenigen die nur Batch nutzen (können/dürfen/sollen/wollen) soll das hier eine Erleichterung zum Extrahieren von speziellen Textfragmenten sein. Ich weiß es gibt da schon Tools wie "sed" - für manch einen Anfänger dürfte das jedoch Overkill sein.
Aktuelle Version v0.8.0.50 vom 08.08.2013
Hinweise: Bei Verwendung der String-Option kann der Text nur aus einer Zeile bestehen und darf keine Zeilenumbrüche enthalten. Bitte beachtet auch die maximale Länge von 8.191 Zeichen die die Eingabeaufforderung akzeptiert. Sollen nur bestimmte Teile eines Patterns ausgegeben werden könnt Ihr das wie üblich mit Klammern () um den jeweiligen Part im Pattern machen. Außerdem kann mit dem Parameter
BatchRex kennt folgende Kommandozeilen-Parameter:
Alternativ kann in einer Textdatei nach Text gesucht werden dann werden diese Parameter benötigt:
(Es kann nur eine der beiden Optionen genutzt werden: entweder
Achtung Sonderzeichen
Zu beachten sind die Batch-Sonderzeichen im Zusammenhang mit dem Pattern. Sollen diese z.B. in dem Pattern verwendet werden müssen diese "Escaped" werden. Das Escapen der Sonderzeichen der RegEx-Pattern selber ist zusätzlich zu beachten (siehe dazu Referenz der verfügbaren Regex-Optionen)
Bei Fragen zu Regular Expressions nutzt bitte zu aller erst die gängigen Anleitungen im Netz bzw. die weiter oben erwähnte Referenz der mit dem Tool gültigen RegEx-Syntax.
Fragen solcher Art gehören bitte nicht in die Kommentare dieses Beitrags.
Das Tool kann frei und ohne Einschränkungen genutzt werden.
Hoffe das Programm nutzt dem ein oder anderen bei seinem Projekt.
So nun viel Spaß damit ...
Grüße @colinardo
(+) Parameter
(+) Parameter
(--) Parameter
Erst-Version vom 21.07.2013
- BatchRex-Erstausgabe
Für all diejenigen die nur Batch nutzen (können/dürfen/sollen/wollen) soll das hier eine Erleichterung zum Extrahieren von speziellen Textfragmenten sein. Ich weiß es gibt da schon Tools wie "sed" - für manch einen Anfänger dürfte das jedoch Overkill sein.
Download
Das Tool kann hier heruntergeladen werdenAktuelle Version v0.8.0.50 vom 08.08.2013
Verwendung von BatchRex
BatchRex extrahiert Text anhand der Regular-Expression aus einem übergebenen String oder einer Textdatei und gibt die Treffer auf der Kommandozeile aus. Standardmäßig wird der erste Treffer in dem String ausgegeben. Sollen mehrere Vorkommen ausgegeben werden kann dies mit der Option/global
erreicht werden.Hinweise: Bei Verwendung der String-Option kann der Text nur aus einer Zeile bestehen und darf keine Zeilenumbrüche enthalten. Bitte beachtet auch die maximale Länge von 8.191 Zeichen die die Eingabeaufforderung akzeptiert. Sollen nur bestimmte Teile eines Patterns ausgegeben werden könnt Ihr das wie üblich mit Klammern () um den jeweiligen Part im Pattern machen. Außerdem kann mit dem Parameter
/group:n
die Gruppe ausgewählt werden welche ausgegeben werden soll.BatchRex kennt folgende Kommandozeilen-Parameter:
Benötigte Parameter bei Übergabe eines Strings auf der Kommandozeile:
/string:"STRING DER DURCHSUCHT WERDEN SOLL" | Text in dem gesucht werden soll |
/pattern:"REGULAR EXPRESSION PATTERN" | Regular Expression Pattern der den gesuchten Text extrahiert / Referenz der verfügbaren Regex-Optionen |
Alternativ kann in einer Textdatei nach Text gesucht werden dann werden diese Parameter benötigt:
(Es kann nur eine der beiden Optionen genutzt werden: entweder
/string
oder /file
)Benötigte Parameter bei der Suche in einer Textdatei:
/file:"PFAD ZUR TEXTDATEI" | Pfad zu einer Textdatei in der gesucht werden soll |
/pattern:"REGULAR EXPRESSION PATTERN" | Regular Expression Pattern der den gesuchten Text extrahiert / Referenz der verfügbaren Regex-Optionen |
[Optionale Parameter]
/global | Gibt alle Treffer des Pattern aus. Ohne diesen Parameter wird nur der erste Treffer des Pattern ausgegeben |
/group:n | Gibt die Gruppe mit der Nummer "n" innerhalb des Pattern an welche ausgegeben werden soll. Hierzu verwendet man Klammern im Pattern |
Rückgabewerte
Zurückgegeben werden bei keinem Fehler die gefundenen Textstellen, ansonsten werden folgende Error-Codes zurückgegeben:ERRORLEVEL | Fehler |
---|---|
0 | kein Fehler |
1 | Falsche Parameterverwendung |
2 | Keine passenden Fundstellen im Text |
3 | Syntaxfehler im Regular Expression Patttern |
4 | Datei existiert nicht |
5 | sonstiger Fehler |
Beispiele
Beispiel 1: Die Verwendung in einer Batchdatei mit Übergabe eines Strings:
(Im Beispiel werden alle Telefonnummern extrahiert)@echo off
set "text=Dies ist der Text in dem gesucht wird Tel.: +49123456789 Tel.:+49987654321"
batchRex.exe /string:"%text%" /pattern:"Tel\.: ?(\+?\d*)" /global
Beispiel 2: Textdatei durchsuchen
@echo off
set "datei=C:\Suchdatei.txt"
batchRex.exe /file:"%datei%" /pattern:"Tel\.: ?(\+?\d*)" /global
Beispiel 3: Textdatei durchsuchen und nur ersten Treffer zurückgeben
@echo off
set "datei=C:\Suchdatei.txt"
batchRex.exe /file:"%datei%" /pattern:"Tel\.: ?(\+?\d*)"
Beispiel 4: Datei manuell Zeile für Zeile durchsuchen
@echo off
set "datei=C:\Suchdatei.txt"
for /f "usebackq tokens=* delims=" %%f IN ("%datei%") DO (
batchRex.exe /string:"%%f" /pattern:"Tel\.: ?(\+?\d*)"
)
Achtung Sonderzeichen
Zu beachten sind die Batch-Sonderzeichen im Zusammenhang mit dem Pattern. Sollen diese z.B. in dem Pattern verwendet werden müssen diese "Escaped" werden. Das Escapen der Sonderzeichen der RegEx-Pattern selber ist zusätzlich zu beachten (siehe dazu Referenz der verfügbaren Regex-Optionen)
Bei Fragen zu Regular Expressions nutzt bitte zu aller erst die gängigen Anleitungen im Netz bzw. die weiter oben erwähnte Referenz der mit dem Tool gültigen RegEx-Syntax.
Fragen solcher Art gehören bitte nicht in die Kommentare dieses Beitrags.
Das Tool kann frei und ohne Einschränkungen genutzt werden.
Hoffe das Programm nutzt dem ein oder anderen bei seinem Projekt.
So nun viel Spaß damit ...
Grüße @colinardo
Versionshistorie:
Version 0.8.0.50 vom 08.08.2013(+) Parameter
/group:n
hinzugefügt um Gruppenmatching zu ermöglichen(+) Parameter
/global
hinzugefügt. Standardmäßig wird ohne Verwendung von /global
nur der erste Treffer geliefert.(--) Parameter
/first
entfernt und durch /global
ersetztErst-Version vom 21.07.2013
- BatchRex-Erstausgabe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 212057
Url: https://administrator.de/contentid/212057
Ausgedruckt am: 19.11.2024 um 19:11 Uhr