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/
Aracnus likes this.
Augusto Campos reshared this.
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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/
Augusto Campos
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
Augusto Campos
Unknown parent • • •Pitico-Senpai -Rasta 🍁🔥🚭
in reply to Augusto Campos • • •