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.