Skip to main content


O grep é um dos filtros mais populares do Unix, e serve para localizar textos ou padrões em arquivos ou fluxos.

Sua popularidade é tamanha que ele frequentemente está presente já nas lições iniciais de cursos de Linux, e seu nome passou a ser usado como sinônimo para o ato de pesquisar, até mesmo em editores de texto para outros sistemas.

O grep parece corriqueiro, mas tem muitos detalhes interessantes, e nesta thread vamos conhecer um pouco mais sobre os bastidores e a sua história.

1/

Augusto Campos reshared this.

in reply to Augusto Campos

A utilidade prática do grep contribuiu para sua ampla disseminação. Por exemplo, eu lembro de ter usado uma versão 8 bits, para MSX, nos anos 1980, e usei muito as versões para DOS e Windows, na década seguinte.

O nome vem da sequência de teclas para acionar a mesma funcionalidade de pesquisa (Global / Regular Expression / Print) no venerável editor 'ed', lá nas origens do Unix.

Mas o grep não é muito posterior ao ed. Os dois são de 1973 (que também é o mesmo ano em que eu nasci).

2/

in reply to Augusto Campos

A versão inicial do grep – que se chamava simplesmente s (de "search") – foi escrita pelo próprio Ken Thompson, um dos pais do Unix. Após ter sido modificada a pedido de um colega, e já com o nome de grep, a ferramenta foi incluído na versão 4 do Unix (1973).

Existe uma lenda de que o grep foi escrito em apenas uma noite, após o tal pedido, mas Thompson nega, e afirma que foi um mal entendido - ele já havia escrito o código antes, e não havia divulgado.

3/

in reply to Augusto Campos

Quem usa distribuições Linux provavelmente tem instalado o ágil GNU Grep, cuja versatilidade é grande a ponto de ter gerado um fato raro: levou a versão BSD do grep, tradicionalmente vista como rival, a adotar os parâmetros longos (como --ignore-case) que a versão do GNU popularizou.

Já o BSD Grep está presente nos próprios BSDs e em outros sistemas Unix não-GNU, como o sistema operacional do Mac, por exemplo. No meu Mac o grep default veio do FreeBSD, e eu instalei por cima o do GNU.

4/

in reply to Augusto Campos

Ambas as implementações do grep possuem algo em comum: também podem ser chamadas pelos comandos alternativos egrep e fgrep - para fazer buscas, respectivamente, por expressões regulares mais completas (extended, ou ERE), ou por strings fixas.

A sintaxe das ERE (do comando egrep) é aquela que é familiar a programadores deste século, onde caracteres como ?, +, |, () e {} têm significado especial por default. O comando grep "seco" interpreta uma sintaxe básica, chamada BRE.

5/

in reply to Augusto Campos

O egrep e o fgrep foram incluídos a partir da versão 7 do Unix (1979) - porém só o grep faz parte do padrão POSIX; a razão da existência dos outros 2 comandos é por conveniências de implementação, considerando as limitações dos computadores da época.

Hoje em dia, egrep, fgrep (e outras variantes como rgrep e bzgrep) são meros links para o mesmo executável do grep, e podem ser acionados também como parâmetros da linha de comando: "grep -E" e "grep -F", respectivamente.

6/

in reply to Augusto Campos

Porém faz tempo que as limitações dos anos 1970 não estão mais presentes. Desde 2007 o GNU grep marcou como obsoletos os comandos egrep ou fgrep. Mas muitos usuários (e seus scripts) continuaram a chamá-los.

Assim, a partir da versão 3.8 do GNU Grep (de 2022), o uso com os nomes de egrep e fgrep passou a gerar um aviso de obsolescência, lembrando que que podem ser substituídos pelo grep com parâmetros.

O manual até mostra um script de uma linha para manter o nome original, no futuro.

7/

in reply to Augusto Campos

Para mim, a sintaxe completa (ou ERE) das expressões regulares é a mais natural, e sou leitor de manual, então sabia do caso e há anos passei a usar "grep -E" nos meus scripts.

Sugiro que você faça o mesmo, e evite assim uma incompatibilidade quando eles resolverem arrancar o de vez o band-aid...

8/

in reply to Augusto Campos

O grep é um utilitário maduro, mas sempre há espaço para evolução, e a já mencionada versão GNU 3.8 trouxe algumas novidades: vários casos novos de sintaxe ambígua passaram a ser tratados e, para quem usa expressões regulares do Perl, o suporte evoluiu da implementação PCRE para a PCRE2.

As versões do grep lançadas desde então (2022 em diante) tiveram foco também em corrigir ou complementar o suporte às expressões regulares estilo Perl.

9/

in reply to Augusto Campos

Se você quer explorar as possibilidades do grep e da fauna de utilitários e bibliotecas que tiram proveito da mesma tecnologia, recomendo muito a 5ª edição do livro Expressões Regulares, do Aurélio Marinho Jargas/Novatec.

E se quiser ir além das funcionalidades históricas do grep, pode explorar alguns dos seus sucessores, como o ripgrep, rak, The Silver Searcher e The Platinum Searcher; estes últimos também são conhecidos como ag e pt, dos respectivos elementos na tabela periódica.

10/10

Unknown parent

This website uses cookies to recognize revisiting and logged in users. You accept the usage of these cookies by continue browsing this website.