Rohrleitungen findstr Ausgabe
Windows-Kommandozeile, ich möchte, um eine Datei zu suchen, die für alle Zeilen beginnend mit:
# NNN "<file>.inc"
wo NNN
ist eine Zahl und <file>
eine beliebige Zeichenfolge.
Will ich mit findstr, denn ich kann nicht verlangen, dass der Benutzer, der das script installieren ack.
Hier ist der Ausdruck, den ich kam mit:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*.inc" all_pre.txt
Die Datei zu suchen ist all_pre.txt
.
So weit So gut. Ich will jetzt die pipe an einen anderen Befehl, zum Beispiel sagen more
.
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9]*.inc" all_pre.txt | more
Ist die Folge die gleiche Ausgabe wie das Vorherige Befehl, jedoch mit dem Datei-Namen als Präfix für jede Zeile (all_pre.txt).
Dann kommt:
FINDSTR: cannot open |
FINDSTR: cannot open more
Warum werden nicht die Rohr-Arbeit?
Ausschnitt der Inhalte all_pre.txt
# 1 "main.ss"
# 7 "main.ss"
# 11 "main.ss"
# 52 "main.ss"
# 1 "Build_flags.inc"
# 7 "Build_flags.inc"
# 11 "Build_flags.inc"
# 20 "Build_flags.inc"
# 45 "Build_flags.inc(function a called from b)"
EDIT: ich brauche zu entkommen, den Punkt in der regex auch. Nicht die Frage, aber lohnt sich zu erwähnen.
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc" all_pre.txt
BEARBEITEN nachdem Frank Bollack:
>findstr /r /c:"^# [0-9][0-9]* \"[a-zA-Z0-9_]*\.inc.*" all_pre.txt | more
nicht funktioniert, obwohl (denke ich), sollte sich für die gleichen string wie vorher, dann beliebige Zeichen, beliebig oft. Das muss die "
, richtig?
cannot open
ist die beste übersetzung, die ich machen konnte, ich weiß nicht genau, was das wäre auf einem echten englischen OS.InformationsquelleAutor Gauthier | 2010-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen fehlt ein abschließendes
\"
in Ihr Suchmuster.Den oben genannten arbeiten für mich.
Edit:
Diese aktualisierte such-string wird nun mit diesen Zeilen aus deinem Beispiel:
Edit:
Zur Umgehung dieser "bug" in
findstr
Sie können Ihre Suche in eine batch-Datei wie folgt:Name es so etwas wie
myfindstr.bat
und nennen mag:Können Sie nun die Rohr-und Umleitungs-Operatoren wie üblich.
Hoffe, das hilft.
# 123 "file.inc(other information)"
.Beachten Sie auch, dass die
findstr
Befehl ohne Rohr (und ohne nachfolgende\"
) ist die Ausgabe der entsprechenden Zeilen.Ich konnte nicht finden jede Bezugnahme ist die Erklärung dieser Sonderbarkeit, aber es scheint, als ob
findstr
erwartet immer ausgeglichen Anführungszeichen im Suchtext.Ich Stimme mit Ihnen überein, und ich scheine nicht allein zu sein: serverforumz.com/...
Vielen Dank für den aktualisierten string. Obwohl es in meinem Fall, bedeutet es, dass findstr nicht funktionieren würde, für
# 123 "filefilefile.inc(other info)
ohne die schließenden Anführungszeichen. Jemand sollte sich schämen.InformationsquelleAutor Frank Bollack
Ich kann nicht wirklich erklären warum, aber aus meiner Erfahrung, obwohl
findstr
Verhalten mit festen strings (z.B./c:"some string"
) ist genau wie gewünscht, reguläre Ausdrücke sind ein anderes Tier. Ich routinemäßig verwenden Sie die Feste string-Suche-Funktion wie so extrahiert Zeilen aus CSV-Dateien:Kein Problem da.
Aber mit regulären Ausdrücken (z.B.
/R "^\"some string\""
) erscheint zu zwingen, diefindstr
Ausgabe auf die Konsole und kann nicht umgeleitet werden, auf jeden Fall. Ich habe versucht>
,>>
,1>
,2>
- und alle scheitern, wenn Sie mit regulären Ausdrücken.Mein workaround dafür ist die Verwendung von " findstr als zweiten Befehl. In meinem Fall habe ich dies getan:
Die für mich gearbeitet, ohne Frage direkt von einer Befehlszeile aus, mit einem sehr komplexen regulären Ausdruck. In meinem Fall hatte ich nur aus den " für Sie zu arbeiten. andere Zeichen wie , und . fein gearbeitet, wie Literale im Ausdruck, ohne entkommen.
Ich bestätigt, dass das Verhalten ist das selbe, auf beiden windows 2008 und Windows 7.
EDIT: eine Andere Variante, die auch anscheinend funktioniert:
es ist das gleiche Prinzip wie mit
type
, sondern nur mit der Kommandozeile selbst erstellen die pipe.InformationsquelleAutor intech_guy
Wenn du einen regex verwenden, mit einer geraden Anzahl von doppelten Anführungszeichen, es funktioniert perfekt. Aber die Anzahl der " Zeichen ungerade ist, wird die Umleitung nicht funktioniert. Sie können entweder komplett auf deine regex mit dem zweiten Zitat (man kann die Bandbreite für diesen Zweck:
[\"\"]
), oder ersetzen Sie die Anführungszeichen mit der passt das Metazeichen Punkt.Sieht es aus wie eine cmd.exe Ausgabe findstr ist nicht schuldig.
InformationsquelleAutor Michael Yutsis