Qual é a diferença entre grep, pgrep, egrep, fgrep?

50

Gostaria de analisar as diferenças entre grep , pgrep , egrep e fgrep e como usá-las.

    
por Eric Leschinski 21.11.2012 / 20:36

1 resposta

79

Diferenças entre grep, pgrep, egrep e fgrep (Linux):

grep

grep é um acrônimo que significa "Global Regular Expressions Print". grep é um programa que varre um arquivo ou linha especificado, linha por linha, retornando linhas que contêm um padrão. Um padrão é uma expressão que especifica um conjunto de cadeias interpretando caracteres como meta-caracteres. Por exemplo, o caractere meta asterisco (*) é interpretado como significando "zero ou mais do elemento precedente". Isso permite que os usuários digitem uma pequena série de caracteres e metacaracteres em um comando grep para que o computador nos mostre quais linhas correspondem aos arquivos.

O comando grep padrão se parece com:

grep <flags> '<regular expression>' <filename>

grep imprime os resultados da pesquisa na tela (stdout) e retorna os seguintes valores de saída:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

Alguns sinalizadores comuns são: -c para contar o número de correspondências bem-sucedidas e não imprimir as correspondências reais, -i para tornar o caso de pesquisa insensível, -n para imprimir o número da linha antes de cada impressão de jogo, -v para obter o complemento da expressão regular (ou seja, retornar as linhas que não correspondem) e -l para imprimir os nomes dos arquivos com as linhas que correspondem à expressão.

egrep

egrep é um acrônimo que significa "Extended Global Regular Expressions Print".

O 'E' em egrep significa tratar o padrão como uma expressão regular. "Expressões regulares estendidas", abreviado como 'ERE', está habilitado no egrep. egrep (que é o mesmo que grep -E ) trata + , ? , | , ( e ) como meta-caracteres.

Em expressões regulares básicas (com grep), os meta-caracteres ? , + , { , | , ( e ) perdem seu significado especial. Se você quiser que o grep trate esses caracteres como meta-caracteres, escape deles \? , \+ , \{ , \| , \( e \) .

Por exemplo, aqui o grep usa expressões regulares básicas onde o mais é tratado literalmente, qualquer linha com um sinal de mais nele é retornada.

grep "+" myfile.txt
O egrep, por outro lado, trata o "+" como um meta caractere e retorna todas as linhas porque plus é interpretado como "uma ou mais vezes".

egrep "+" myfile.txt

Aqui, cada linha é retornada porque o + foi tratado pelo egrep como um caractere meta. grep normal teria procurado apenas por linhas com um literal + .

fgrep

fgrep é um acrônimo que significa "Expressões regulares globais de expressões fixas".

fgrep (que é o mesmo que grep -F) é fixo ou rápido grep e se comporta como grep mas NÃO reconhece nenhum meta-caractere de expressão regular como sendo especial. A pesquisa será concluída mais rapidamente porque processa apenas uma string simples em vez de um padrão complexo.

Por exemplo, se eu quisesse pesquisar meu .bash_profile por um ponto literal (.) então usar o grep seria difícil porque eu teria que escapar do ponto porque o ponto é um metacaractere que significa 'wild card, qualquer personagem ':

grep "." myfile.txt

O comando acima retorna todas as linhas do arquivo myfile.txt. Faça isso:

fgrep "." myfile.txt

Em seguida, apenas as linhas com um literal '.' neles são devolvidos. O fgrep nos ajuda a não nos incomodar em escapar de nossos metacaracteres.

pgrep

pgrep é um acrônimo que significa "Impressão Global de Expressões Regulares do ID do Processo".

O pgrep examina os processos atualmente em execução e lista os IDs do processo que correspondem aos critérios de seleção para stdout. O pgrep é útil quando tudo que você quer saber é o número inteiro do processo de um processo. Por exemplo, se eu quisesse conhecer apenas o ID do processo do meu processo mysql, usaria o comando pgrep mysql , que retornaria um ID de processo como 7312.

    
por 21.11.2012 / 20:36