CygWin: o comando grep mostra uma mensagem de “coincidência de arquivo binário”

1

Eu estive pesquisando sobre isso, mas, talvez devido à minha versão em espanhol do CygWin / Windows, não consegui encontrar uma solução.
Eu tenho mais recente (dezembro de 2014) CygWin 32 bits instalado, e parece que há algum problema com o seu comando grep .

Como você sabe, o CygWin shell pode executar comandos do Windows e do Linux, portanto, estou tentando filtrar o comando resultados de meus serviços list, com os seguintes resultados:

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

Acho que esta mensagem se traduz em: Binary file match (standard input) .

Se eu tentar de um shell do Windows (usando apenas comandos do 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

... obtenho os resultados corretos.

Esta é a versão grep incorporada do CygWin:

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

Eu encontrei algum tipo de solução alternativa baixando UnxUtils e usando sua versão 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

Mas, bem ... eu acho que a maneira apropriada de resolver isso seria fazer a versão grep original do CygWin funcionar como deveria.

O que está acontecendo aqui? Devo baixar e compilar a última versão do grep como última esperança?

    
por Sopalajo de Arrierez 09.12.2014 / 04:54

1 resposta

5

Como grep um arquivo de texto que contém alguns dados binários?

Syntax

grep [options] PATTERN [FILE...]

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

Options

...

-a

--text

Process a binary file as if it were text; this is equivalent to the --binary-files=text option.

Usar a opção acima permitirá que o grep ignore qualquer caractere estranho que impeça grep de funcionar como esperado.

Então, o seguinte deve funcionar:

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

Ou:

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

Resposta do StackOverflow de origem Como grep um arquivo de texto que contém alguns dados binários? por paxdiablo e grep - Pesquisar arquivo (s) para texto específico.

    
por 09.12.2014 / 18:16

Tags