1

Я гуглял по этому поводу, но, возможно, из-за испанской версии CygWin/Windows я не смог найти решение.
У меня установлен последний (декабрь 2014 г.) 32-битный CygWin , и кажется, что с его командой grep возникли некоторые проблемы.

Как вы знаете, оболочка CygWin может запускать команды как Windows, так и Linux, поэтому я пытаюсь отфильтровать результаты моей команды list services со следующими результатами:

$ sc query state= all | grep "stopped" -i
Coincidencia en el fichero binario (entrada estándar)

Я думаю, что это сообщение переводится как: Binary file match (standard input) .

Если я пытаюсь из оболочки Windows (используя только команды Windows):

C:\Users\Luis-> sc query state= all | find "stopped" /i 
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED

... Я получаю правильные результаты.

Это встроенная версия CygWin grep:

$ grep -V
grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
Licencia GPLv3+: GPL de GNU versión 3 o posterior

Я нашел какой-то обходной путь , загрузив UnxUtils и используя его версию grep 32bit-Windows:

$ PathToUNXUtils="/cygdrive/d/Utilidades/UnxUtils/"

$ "$PathToUNXUtils"grep -V
grep (GNU grep) 2.5.1
Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.

$ sc query state= all | "$PathToUNXUtils"grep "stopped" -i | more.com
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED
        ESTADO                       : 1  STOPPED

Но хорошо... Я думаю, что подходящий способ решить эту проблему - сделать так, чтобы оригинальная версия greg CygWin работала как надо.

Что здесь происходит? Должен ли я скачать и скомпилировать последнюю версию grep как последнюю надежду?

1 ответ1

5

Как получить текстовый файл, который содержит некоторые двоичные данные?

Синтаксис

grep [options] PATTERN [FILE...]

grep [options] [-e PATTERN | -f FILE] [FILE...]

Опции

...

-a

--text

Обрабатывать двоичный файл, как если бы он был текстовым; это эквивалентно --binary-files=text .

Использование вышеуказанного параметра позволит grep игнорировать любые странные символы, которые мешают работе grep как ожидалось.

Поэтому должно работать следующее:

sc query state= all | grep "stopped" -i --text

Или же:

sc query state= all | grep "stopped" -a -i

Source StackOverflow answer Как получить текстовый файл, содержащий некоторые двоичные данные? По paxdiablo и grep - Поиск файлов для конкретного текста.

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