zgrep vs. egrep vs. grep

0

Existe uma regra prática fácil de lembrar para saber qual é a diferença entre:

  • egrep

  • zgrep

  • grep

e saber quais estão instalados na minha máquina?

(Na verdade, parece que há alguns: "se o GNU grep estiver instalado, então ..., else ...")

    
por Basj 04.10.2017 / 12:26

1 resposta

8

zgrep geralmente é um script enviado com gzip (veja também o comentário de Stephen Kitt abaixo) que grep s em arquivos compactados (com formatos de compactação que gzip reconhece). O z é para z ip (não para o formato de arquivo compactado pkzip, mas para compactação / compactação de arquivos).

egrep foi um comando introduzido no Unix V7 no final dos anos 70 com um novo algoritmo e sintaxe regexp em comparação com o antigo grep (ele próprio um comando autônomo para implementar o comando g/re/p do antigo texto ed editor). Esse é o grep para os regexps xtended (ERE) de e , ao contrário dos regexps básicos (BRE) compreendidos por grep / sed / ed / vi .

Operadores adicionais como \{ e \< foram adicionados posteriormente a algumas implementações de grep , mas não egrep , tornando grep em alguns aspectos mais estendidos do que egrep .

No início dos anos 90, o POSIX tentou unificar egrep e grep em um único comando (onde grep -E foi feito para fazer o que egrep fez) e tornar o operador {min,max} em ERE equivalente a \{min,max\} em REs de grep (portanto, não compatível com egrep ). Ele também especificou a opção -F para a pesquisa f string ixed para substituir o utilitário fgrep .

Hoje, egrep não é um comando padrão (nem é fgrep ). Enquanto a maioria dos sistemas tem um, algumas implementações reconhecem o operador {min,max} , outras não.

grep e grep -E são padrão. Algumas implementações de grep têm comutadores extras para reconhecer sintaxes de regexp ainda mais diferentes, como grep -P para PCRE (ou perl , consulte também o comando pcregrep fornecido com a biblioteca PCRE), grep -X para aumentada regexps ...

E a lista de operadores suportados por grep e grep -E varia de um sistema para outro. Para portabilidade, restrinja a lista especificada por POSIX.

No Solaris, certifique-se de usar /usr/xpg4/bin/grep . O em /bin não é compatível com POSIX.

Várias bibliotecas / ferramentas de compactação fornecem com zgrep , bzgrep , xzgrep scripts, nenhum dos quais padrão.

O único programa de compactação especificado pelo POSIX é compress / uncompress que é para um antigo formato de compressão do início dos anos 80 que ninguém mais usa.

gzip (GNU zip ) entende outro antigo formato de compactação que ainda está em uso atualmente e gzip é encontrado na maioria dos sistemas (a implementação GNU ou um clone). Então você deve ser capaz de fazer:

gzip -d < file.gz | grep BRE

ou:

gzip -d < file.gz | grep -E ERE

para grep em arquivos compactados por gzip. Você pode fazer o mesmo com qualquer outro formato de compactação, desde que tenha acesso à ferramenta correspondente.

    
por 04.10.2017 / 12:38

Tags