Wie grep ich mehrere Strings in mehreren Dateien?

4786
Aren Cambre

Ich versuche, mehrere Zeichenfolgen in mehreren Dateien zu erstellen. Dies ist unter Windows 7 x64 und ich verwende die Geschmacksrichtung von GNUWin32 .

Ich habe grep.bat mit diesem Befehl:

grep "string1\|string2\|string3\|string4" 20*.csv > out.csv 

Es gibt tatsächlich 68 Zeichenfolgen mit jeweils 11 Zeichen. Die Zeichenfolge in den Anführungszeichen ist also 869 Zeichen lang (dazu gehören die 2-Zeichen-Trennzeichen).

Was passiert, ist, dass ich eine out.csv bekomme, aber alles, was es tut, ist das Wechseln zwischen 0 Bytes und einer Kopie meines grep-Befehls! Huh Warum durchsucht grep eine .bat-Datei, wenn ich ausdrücklich gesagt habe, nur Dateien zu überprüfen, die mit 20 * .csv übereinstimmen ?

Wenn ich > out.csvdie .bat entferne und erneut ausführe, wird meine Befehlszeile nur in einem Eingabeaufforderungsfenster wiederholt.

0

2 Antworten auf die Frage

0
Aren Cambre

Verwenden Sie grep unter Ubuntu auf einer VirtualBox-VM und greifen Sie mit der VirtualBox-Funktion "Shared Folders" auf den Windows-Host zu. Dies ist nicht der erste Fehler, den ich in GNUWin32s grep gefunden habe.

Oder installieren Sie stattdessen Cygwin. Bram Schoenmakers vor 10 Jahren 0
0
Leo

Das funktioniert in meinem grep, es sollte auf jeder Plattform funktionieren. Sie möchten die Muster aus einer Datei lesen. Hier ist ein Beispiel (beachten Sie das '-f-', dh Muster von der Standardeingabe lesen (-):

$ man grep > grep.txt $ man cat > cat.txt  $ cat > patterns terminfo full should 

(hier drücken Sie Strg + D)

$ cat patterns | grep -f- *.test  cat.test: The full documentation for cat is maintained as a Texinfo manual. If cat.test: should give you access to the complete manual. grep.test: This version number should be included in all bug reports (see grep.test: should avoid both -q and -s and should redirect standard and grep.test: implementations support \{ instead, so portable scripts should avoid { grep.test: in grep -E patterns and should use [{] to match a literal {. grep.test: portable scripts should avoid it. grep.test: terminfo capability does not apply, when the chosen grep.test: file name wildcard expansion and therefore should not be treated grep.test: pcrepattern(3), terminfo(5), glob(7), regex(7). grep.test: The full documentation for grep is maintained as a TeXinfo manual. If grep.test: should give you access to the complete manual.