grep in windows-batch-Datei
Ich bin beim schreiben einer Windows-batch-Datei, die sich durch eine bestimmte html-index-Datei, die sieht ungefähr so aus (vereinfacht)
<a href=emergency.htm>Emergency Calls</a><br>
<a href=EmeRgency.htm>Emergency Calls</a><br>
<a href=Emergency.htm>Emergency Calls</a><br>
<a href=EMERGENCY.htm>Emergency Calls</a><br>
<a href=E911.htm>Emergency Calls</a><br>
<a href=e911.htm>Emergency Calls</a><br>
und drucken Sie alle links, deren Dateinamen enthalten keine Großbuchstaben, so dass Sie behoben werden können, nicht zu, so gehören alle.
Folgende Werke in unix:
$ grep -v '^<a href=[^A-Z]*\.htm' helpindex.htm
<a href=EmeRgency.htm>Emergency Calls</a><br>
<a href=Emergency.htm>Emergency Calls</a><br>
<a href=EMERGENCY.htm>Emergency Calls</a><br>
<a href=E911.htm>Emergency Calls</a><br>
(- v kehrt match)
Aber mit den UnxUtils grep unter Windows, die eine direkte Portierung von unix grep, ich kann nicht kommen mit einem Weg, zu zitieren, der regex funktioniert. Dies wäre notwendig, um es in eine batch-Datei. Ich 've tried", " mit keine Freude, und auch die-E wechseln. Gibt es eine Möglichkeit, dies zu tun mit dieser besonderen toolset?
@janos führte mich zu der findstr-Befehl in Windows, aber es funktioniert immer noch nicht. Blick auf die findstr helfen, ich sehe:
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
[/F:Datei]
[/C:Zeichenfolge] [/G:Datei] [/D:Verzeichnisliste] [/A:Farbattribute] [/OFF[LINE]]
Zeichenfolgen [[Laufwerk:][Pfad]Dateiname[ ...]]...
/V gibt nur Zeilen, die keine Entsprechung.
...
/C:Zeichenfolge Verwendet angegebenen string als literal Suchbegriff. ...Verwenden Sie Leerzeichen trennen Sie mehrere Suchbegriffe, es sei denn, das argument ist
das Präfix /C Zum Beispiel 'FINDSTR "Hallo" x".y' sucht
für "Hallo" oder "dort" in Datei x.y. 'FINDSTR /C:"Hallo" x".y'
sucht nach "Hallo" im Datei-x -.y.
Aber das funktioniert nicht, entweder:
C:\home\sftp>findstr /V /C:"^<a href=[^A-Z]*\.htm" helpindex.htm
<a href=emergency.htm>Emergency Calls</a><br>
<a href=EmeRgency.htm>Emergency Calls</a><br>
<a href=Emergency.htm>Emergency Calls</a><br>
<a href=EMERGENCY.htm>Emergency Calls</a><br>
<a href=E911.htm>Emergency Calls</a><br>
<a href=e911.htm>Emergency Calls</a><br>
Entweder findstr ist Müll oder es gibt einige subtile Unterschied von grep.
find.exe
und findstr.exe
. Sie sind ähnlich wie grep
(nichts zu tun mit dem UNIX -find
)finden Sie nicht regex? Ich wusste nicht, dass.
findstr sieht aus wie es sollte funktionieren, aber es funktioniert nicht : findstr /V '^<a href=[^A-Z]*\.htm' helpindex.htm produziert mp Ergebnisse, nicht die vier Linien, die uniz grep funktioniert.
Ich habe kein windows um es zu testen, aber eine von Ihnen muss die Muster sind eingeschlossen in doppelte Anführungszeichen, auch wenn es unnötig ist, wie
"simpleterm"
. Ich kann mich nicht erinnern, wenn es war find
oder findstr
, sehen Sie sich unsere für.InformationsquelleAutor Steve Cohen | 2013-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktioniert gut für mich im Windows-command-Konsole:
FINDSTR funktioniert nicht mit
[^A-Z]
weil es verwendet eine nicht-standard-Sortierreihenfolge: Siehe Warum findstr nicht umgehen Fall korrekt (in einigen Fällen)?Können Sie FINDSTR verwenden, um Ihre gewünschte Ausgabe zu verwenden:
Die option /C wird benötigt, um zu erzwingen, wird die gesamte Zeichenkette als ein Suchbegriff.
Die option /R ist notwendig, um Kraft interpretation der Suchbegriff als regulärer Ausdruck. Die Standardeinstellung für die option /C wird ein string-literal.
Möchten Sie vielleicht einen Blick auf Was sind die undokumentierten Funktionen und die Einschränkungen der Windows-Befehl "FINDSTR"?. Es gibt eine lange Liste von "Fallstricke"
Bearbeiten
UnxUtils ist eine alte, veraltete distribution von GNU unix-utilities für Windows. Sie sollten neuere Versionen von GNU-Coreutils: siehe Unterschied zwischen UnxUtils und den GNU CoreUtils
Ich glaube, ich habe meine distribution von GNU Coreutils aus http://gnuwin32.sourceforge.net/packages/coreutils.htm. Ich bin mir nicht sicher, ob das die meisten up-to-date-Paket, aber es sollte bei der Lösung Ihrer grep-problem. Es bietet eine bequeme Paket von vielen Dienstprogrammen.
Weitere option ist, um einzelne GNU-utilities für Windows aus http://gnuwin32.sourceforge.net/packages.html
Ich bin mit GNU grep 2.5.1 für Windows
Mir war die 2.4.2 von UnxUtils
Siehe aktualisierte Antwort für links auf neuere version
InformationsquelleAutor dbenham
Verwenden, Sie können meine FindRepl.bat Programm, das funktioniert, wie Sie wollen. Zum Beispiel:
Können Sie sich hier herunterladen FindRepl.Fledermaus von diese Website
InformationsquelleAutor Aacini