Я пытаюсь 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, то все, что я получаю, это моя командная строка, повторяемая снова и снова в окне командной строки.

2 ответа2

0

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

0

Это работает в моем 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .