Quando grepping um arquivo, grep está retornando true em vez das linhas, por quê?

1

Estou executando um grep em um arquivo com cerca de 13G. Está retornando

Binary file file.xml matches

Eu não esperava isso, achei que retornaria cada linha com minha string para que eu pudesse executar o seguinte,

grep "searchString" ./file.xml | wc -l 

e retorna uma contagem de todas as ocorrências da minha searchString no meu arquivo grande.

    
por Dan Ciborowski - MSFT 09.07.2013 / 14:58

3 respostas

12

Parece que o grep acha que seu arquivo XML é binário em vez de texto.

Se você quiser forçar o grep a tratar seu arquivo como texto, independentemente do conteúdo, você pode usar a opção --text (assumindo o grep grep), assim:

grep --text "searchString" ./file.xml | wc -l

Observe que, se tudo o que você quer é contar as correspondências, provavelmente é melhor usar grep --count em vez de percorrer wc -l , economizando um pipe e processando a invocação.

    
por 09.07.2013 / 15:10
2

Parece que há alguns símbolos incomuns no início do arquivo e grep o detecta como binário. Você pode tentar a opção --binary-files=text .

grep --binary-files=text "searchString" file.xml | wc -l

Da página man:

   --binary-files=TYPE
          If the first few bytes of a file indicate that the file contains
          binary  data, assume that the file is of type TYPE.  By default,
          TYPE is binary, and grep  normally  outputs  either  a  one-line
          message  saying  that  a  binary  file matches, or no message if
          there is no match.  If TYPE is without-match, grep assumes  that
          a  binary  file  does  not  match;  this is equivalent to the -I
          option.  If TYPE is text, grep processes a binary file as if  it
          were  text;  this is equivalent to the -a option.  Warning: grep
          --binary-files=text might output binary garbage, which can  have
          nasty  side  effects  if  the  output  is  a terminal and if the
          terminal driver interprets some of it as commands.
    
por 09.07.2013 / 15:09
-3

Parece que você cometeu um erro ao usar ./file.xml . Se você tentar:

grep "searchString" file.xml | wc -l

Tem algum problema?

    
por 09.07.2013 / 15:04

Tags