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.