win batch regexp suchen und ersetzen
Habe ich eine Reihe von Daten, wie diese
7859 10000:00 7859 10000:00 (xfer#1, to-check=1033/1035)
32768 000:17 22174479 10000:00 (xfer#2, to-check=1032/1035)
Lesen aus einer Datei, und übergeben die Linie durch die Linie eine Methode, in meinem batch-Skript
Was ich will zu tun, die Methode zu extrahieren nur
7859
22174479
aus diesen Zeilen, im Grunde, was wird nach "\d+:\d\d\s+", was dann folgt, sind die zahlen, die ich brauche und dann noch "\d\d.*"
Ist das möglich, nur mithilfe der batch-script, reguläre Ausdrücke und suchen und ersetzen?
Ich habe versucht, und Lesen eine Reihe von Artikeln, konnte aber keine Lösung finden
In die und ich möchte hinzufügen, die zahlen
Danke
BEARBEITEN
Basiert auf Andrei Kommentar zu David Ruhmann Antwort, Andrei will, der token, der 2 Positionen vor (xfer#
, nicht das 3. token von Anfang an.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun, beachten Sie, dass batch ist nicht die beste Sprache für die regex! Cmd verarbeitet die Eingabe einer Zeile in einer Zeit, in der Erwägung, dass regex ermöglicht für multi-line-Verarbeitung.
Es klingt wie Sie nur brauchen, um ein token greifen aus den Leitungen. Vorausgesetzt, die komplette regex für die Zeile sieht wie folgt aus
[\d+\s+\d+:\d\d\s+]+\(xfer#\d+, to-check=\d+/\d+\)
.Dies ermöglicht es uns, zu wissen, dass es Konstanten Trennzeichen in der Zeile.
:
Doppelpunkte, und\s+
Leerzeichen. Von dort ist es nur eine Frage der Verwendung dieser Anker, um zu bestimmen, die token-position.Extrakt der Dritte token getrennt durch einzelne Zeile Leerzeichen aus der Zeile.
Extrakt der zweite token, getrennt durch einzelne Zeile Leerzeichen von der zweiten token getrennt durch Doppelpunkte von der Linie.
Update
Extrahieren Sie die zweite token vor dem letzten Doppelpunkt.
Einschränkungen
"
führen das Skript zum Absturz zu bringen. Eine Methode um dies zu verhindern, ist der Streifen aus den Zitaten, bevor die for-Schleife mitset Line=%Line:"=%
.11707819
?Basierend auf Ihren Kommentar zu David Ruhmann Antwort, Sie wollen, dass die token, der 2 Positionen vor der
(xfer#
string. Ich vermute, es kann getan werden mit native batch-Befehlen, aber das ist ein unangenehmes problem.Ich gehe davon aus, dass Sie eingeschränkt sind auf die Befehle, die systemeigene Windows - keine heruntergeladenen ausführbaren Dateien.
Ich hoffe, dass Sie möglicherweise die JScript verwenden, da es native zu Windows.
Ich geschrieben habe, ein hybrid-JScript - /Batch-utility-Skript mit dem Namen "REPL.BAT" ausführt regex suchen und ersetzen. Es ist ein erstaunlich nützliches Dienstprogramm, trotz verlangen nicht viel code. Das Dienstprogramm macht die Lösung sehr einfach.
Ich verwende FINDSTR filtern die Zeilen, die nicht erfüllen, die Vorlage von mindestens 2 Platz delimted Token vor
(xfer#
. Ich leite den Ergebnissen meiner REPL-Dienstprogramm und erhalten Sie nur die gewünschten token. Das Ergebnis an stdout.Hier ist der code für die REPL.FLEDERMAUS-Dienstprogramm-Skript. Die vollständige Dokumentation ist eingebettet in das Skript.
Der einfachste und flexibelste Weg, das zu erreichen, was Sie wollen, würde die awk (regexp-Beispiele) oder sed (zum Beispiel:
sed -i -r -e "s/(\d+:\d\d\s+)\d+/\1replacementstring/g" filename
) von GnuWin32, die sowohl die Unterstützung Perl-regexp-syntax verwendet. Ich denke, was Sie beteiligt sind, ist genau das, was awk entworfen wurde.Wenn Sie stecken mit nur dem, was verfügbar ist, ohne 3rd-party-tools, die Sie durchführen können, regexp matches mit vbscript. Sie können Aufruf von vbscript-echo das script zu .vbs-Datei, Aufruf cscript vbsfile, und die Erfassung Ihrer Ausgabe. Hier ist ein proof-of-concept.
Beispiel-Ausgabe: