Как grep нескольких строк на несколько файлов?

4721
Aren Cambre

Я пытаюсь grep несколько строк на несколько файлов. Это на Windows 7 x64, и я использую GNUWin32 .

У меня есть grep.bat с этой командой:

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

На самом деле там 68 строк, каждая из которых содержит 11 символов, поэтому длина строки в кавычках составляет 869 символов (включая 2 разделителя символов).

Что происходит, я получаю out.csv, но все, что он делает, - это чередование между 0 байтами и копией моей команды grep! А? Почему grep ищет файл .bat, когда я явно сказал ему проверять только файлы, соответствующие 20 * .csv ?

Если я > out.csvснова удаляю и запускаю .bat, то все, что я получаю, это моя командная строка, повторяемая снова и снова в окне командной строки.

0

2 ответа на вопрос

0
Aren Cambre

Используйте grep в Ubuntu на виртуальной машине VirtualBox и получите доступ к хосту Windows с помощью функции общих папок VirtualBox. Это не первая ошибка, которую я нашел в grep GNUWin32.

Или вместо этого установите Cygwin. Bram Schoenmakers 10 лет назад 0
0
Leo

Это работает в моем grep, это должно работать на любой платформе. То, что вы хотите сделать, это прочитать шаблоны из файла. Вот пример (обратите внимание на '-f-', т.е. считывание шаблонов из стандартного ввода (-):

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

(нажмите Ctrl + 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.