Strings incluídas em '' são ignoradas ao usar o grep

5

Quando tentei pesquisar uma string em um arquivo, os resultados não incluíram os que foram colocados entre aspas simples.

Por exemplo:

grep -rn text folder/

Os resultados não incluíam strings com a seguinte aparência:

'text'

Se importa em me dizer o que estou fazendo de errado?

ATUALIZAÇÃO: Eu apenas testei com um novo arquivo e funcionou! Parece que isso aconteceu apenas em um arquivo específico (um arquivo rubi). Talvez esteja preocupado com a codificação?

    
por Tshepang 18.08.2010 / 12:10

1 resposta

7

Há uma boa chance de você estar enfrentando algum problema de codificação de caracteres. O arquivo que você está tentando usar o grep pode estar em uma codificação de caracteres diferente da codificação padrão do seu sistema. Sistemas Unixy normalmente usam UTF-8 atualmente, o que é compatível com ASCII de 7 bits, mas não com qualquer uma das extensões ASCII de 8 bits. As codificações comuns de 8 bits nos EUA são ISO 8859-1 e Windows CP-1252 . Existem dezenas mais usadas no resto do mundo.

grep assume que todas as entradas estão em sua codificação padrão do sistema. Para grep de um arquivo em uma codificação diferente, use iconv para convertê-lo:

$ iconv -f iso8859-1 -t utf8 myfile.txt | grep something

Sei que isso é altamente inconveniente para seu exemplo recursivo, mas a lição mais ampla é que, se isso resolver o problema, você deverá converter todos os arquivos de texto nessa árvore de diretórios para que sejam compatíveis com a codificação de caracteres do sistema. Se você precisar de compatibilidade com o editor de texto do Windows, não se preocupe, a maioria dos editores de texto do Windows que se concentram na edição de código lidam com UTF-8, embora o Windows use UTF-16 nativamente nos dias de hoje.

Outra possibilidade é que seu arquivo use aspas curvas. As aspas que você digita no teclado são aspas normais - ASCII 39 - mas alguns processadores de texto e editores de texto os substituem por aspas curvas, ou U + 2019 neste exemplo.

Eu gosto de usar este comando para examinar um arquivo para investigar problemas de codificação de caracteres:

$ od -t x1 < myfile.txt | less

Existem vários programas "hexdump" disponíveis, mas eles geralmente fazem coisas inúteis, como exibir os dados como palavras de 16 bits no formato little-endian. Como od também não possui uma coluna de exibição de texto imprimível como qualquer programa decente de despejo, funciona melhor para arquivos curtos. Eu costumo reduzir o exemplo para algo fácil de testar primeiro.

    
por 18.08.2010 / 13:33

Tags