findstr Windows-Befehl regulären Ausdruck
Gibt es eine Möglichkeit zu suchen, für 2 oder mehr Leerzeichen hintereinander zwischen den Buchstaben, mit findstr
von der Windows Befehlszeile?
Beispiel:
Hello world! - nomatch wanted
Hello world! - match wanted
Was ist syntax für reguläre Ausdrücke?
Auch, können Sie mir bitte helfen zu verstehen, die folgenden Kommandozeilen-Sitzung (Unterschied zwischen [ ]
und [ ]*
; der zweite Befehl gibt nichts zurück):
c:\1>findstr -i -r "view[ ]*data.sub" "view data sub.acf"
View Data Sub.ACF: "].DATE_STAMP)>=[Forms]![MainNav]![View Data Sub]"
View Data Sub.ACF: "].DATE_STAMP)<[Forms]![MainNav]![View Data Sub]"
c:\1>findstr -i -r "view[ ]data.sub" "view data sub.acf"
c:\1>
PS: ich bin Einfach neugierig; ich weiß, über awk, perl, C# etc., aber was findstr
?
InformationsquelleAutor user1380142 | 2012-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen einfach nur, um zwei aufeinander folgende Räume:
Oder in einer groß-und Kleinschreibung in regular expression:
Der wichtige Teil ist die
/C:
vor dem Muster. Dies sagtfindstr
zur Behandlung der Muster als string-literal. Ohne es, findstr, teilt das Muster in mehrere Muster zu Räumen. Die, in meiner Erfahrung, ist nie das, was Sie wollen.Update
Zwei oder mehr Leerzeichen zwischen den Buchstaben:
Beachten Sie, dass es gibt drei Räume in dem Muster. Dies entspricht einem Brief, zwei Leerzeichen gefolgt von null oder mehr Leerzeichen (D. H. zwei oder mehr Leerzeichen) und ein weiterer Brief.
findstr
ziemlich gut. Was ich nicht weiß ist, ob ein trick vorhanden ist, um es für ein problem, das ich gerade beschrieben habe. (IMHO, anstelle von "c:" wechseln Sie, wir können immer mit einfachen alten Artfind
, nichtfindstr
)finden Sie nicht, tun Sie, regelmäßige Ausdrücke, soweit ich weiß.
Ich habe meine Antwort aktualisiert
Die Antwort, die funktioniert, wie geschrieben, aber seien Sie vorsichtig mit regex Zeichenklasse reicht. Tun Sie nicht so, wie Sie denken.
[a-z]
passt zu allen oberen und unteren alpha-Zeichen (einschließlich nicht-englischen diacriticals) außerZ
, auch wenn die Suche groß-und Kleinschreibung. Ein äquivalent suchen, ohne die/I
option wärefindstr /R /C:"[a-zZ] *[a-zZ]" input.txt
. Siehe den Abschnitt "Regex Zeichenklassen Bereiche [x-y]" in der Nähe des unteren stackoverflow.com/a/8844873/1012053 für mehr info.InformationsquelleAutor arx
Finden zwei oder mehr aufeinanderfolgende Leerzeichen zwischen den Buchstaben:
Übersetzung: match-Zeilen mit 'o' zwei Leerzeichen, die null oder mehr Leerzeichen, 'w'. (Die eckigen Klammern sind überflüssig, aber fügen Sie Klarheit.) Vermutlich wissen Sie bereits, dass
findstr /?
wird Ihnen eine Zusammenfassung der syntax für reguläre Ausdrücke?Als für den zweiten Teil Ihrer Frage: wie arx bereits darauf hingewiesen, dass der Grund, warum Sie nicht immer die Ergebnisse, die Sie erwarten, ist, dass Sie nicht mit den /C-flag. Betrachten Sie Ihren ersten Befehl:
Dies wird interpretiert als eine Suche für jede Zeile die passende entweder von zwei reguläre Ausdrücke
view[
und]*data.sub
. Ich habe einige Experimente und ich glaube, die ersten regex entweder verworfen als falsch gebildet, oder interpretiert, denen ein match mit einem leeren Satz von Zeichen. Die zweite regex ist wie folgt interpretiert: null oder mehr ']', 'Daten', ein beliebiges Zeichen, 'sub'. Wie es geschieht, geschieht dies zu den gleichen Linien wie die einzelnen regex, die Sie dachte, Sie wurden mit Hilfe. Nicht so, wenn Sie nehmen die Sternchen:Nun der zweite regex ist wie folgt interpretiert: genau ein ']', 'Daten', ein beliebiges Zeichen, 'sub'. Da die Zeichenfolge"] Daten' tritt nicht in Ihrem text, keine der Linien übereinstimmen. Stattdessen sollten Sie die Option /c:
Nun sind Sie auf der Suche nach einem regex: 'view', ein Raum, 'Daten', ein beliebiges Zeichen, 'sub'. Das ist vermutlich das, was Sie tun wollte.
findstr /?
Ausgabe des Befehls: "/C:string Uses specified string as a **literal** search string.
"?Offenbar in diesem Zusammenhang, Sie sind mit dem Wort "literal" bedeutet "nicht aufgeteilt in separaten strings zu Räumen". Das ist bedauerlich, da Sie verwenden das gleiche Wort mit einer anderen Bedeutung schon früher in dem gleichen text. Vielleicht ist dieser Satz wurde geschrieben, bevor findstr unterstützt reguläre Ausdrücke, oder einfach nur durch eine andere person, die war nicht zu denken reguläre Ausdrücke an der Zeit.
>>...Sie sind mit dem Wort "literal" bedeutet "nicht aufgeteilt in separaten strings zu Räumen".
>>...Sie sind mit dem Wort "literal" bedeutet "nicht aufgeteilt in separaten strings zu Räumen". Wow!!! Vielen Dank Harry. Jetzt bin ich wohl mit
findstr
interpretation von Räumen. "C:" wechseln ist mehr als nützlich, ich dachte, es war, es was Beschreibung Mittel. Ich bin beeindruckt stackoverflow.com!Tatsächlich ist die situation ein bisschen komplizierter. Nicht nur ist
/C:"search"
nie trennen bei Leerzeichen, es ist interpretted als Zeichenkette standardmäßig. Es kann als reguläre Ausdrücke behandelt, wenn die/R
- option angegeben ist. Vergleichen Sie dies mit"search"
übergeben, wie ein einfaches argument. Es ist aufgeteilt in jeden Raum in mehrere, Suchbegriffe und jeder string kann interpretiert werden als ein literal oder eine regex, je nach Inhalt des ersten Strings. Finden Sie im Abschnitt "Standard-Art der Suche: Wörtliche vs Regular Expression" stackoverflow.com/a/8844873/1012053 für mehr info.InformationsquelleAutor Harry Johnston