Eu gostaria de um passeio por sobre as diferenças entre grep
, pgrep
, egrep
, e fgrep
e como eu iria usá-los.
Eu gostaria de um passeio por sobre as diferenças entre grep
, pgrep
, egrep
, e fgrep
e como eu iria usá-los.
Respostas:
grep é um acrônimo que significa "Global Regular Expressions Print". grep é um programa que verifica um ou mais arquivos especificados 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 meta caractere asterisco (*) é interpretado como significando "zero ou mais do elemento anterior". Isso permite que os usuários digitem uma série curta de caracteres e meta caracteres em um comando grep para que o computador nos mostre quais linhas em quais arquivos correspondem.
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
tornar a pesquisa insensitiva, -n
imprimir o número da linha antes de cada impressão da correspondência, -v
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 linhas que correspondam à expressão.
egrep é um acrônimo que significa "Impressão de expressões regulares globais estendidas".
O 'E' no egrep significa tratar o padrão como uma expressão regular. "Expressões regulares estendidas" abreviadas 'ERE' são ativadas no egrep. egrep (que é a mesma que grep -E
) trata +
, ?
, |
, (
, e )
como meta-caracteres.
Em expressões regulares básicas (com grep), a meta-caracteres ?
, +
, {
, |
, (
, e )
perdem seu significado especial. Se você quiser grep para tratar estes caracteres como meta-caracteres, escapar-lhes \?
, \+
, \{
, \|
, \(
, e \)
.
Por exemplo, aqui o grep usa expressões regulares básicas onde o sinal de mais é tratado literalmente, qualquer linha com um sinal de mais é retornada.
grep "+" myfile.txt
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 +
foi tratada pelo egrep como um meta caractere. o grep normal teria pesquisado apenas linhas com um literal +
.
fgrep é um acrônimo que significa "Impressão de expressões regulares globais de seqüência fixa".
O fgrep (que é o mesmo que grep -F) é um grep fixo ou rápido e se comporta como grep, mas NÃO reconhece nenhum meta-caractere de expressão regular como especial. A pesquisa será concluída mais rapidamente porque processa apenas uma sequência simples e não um padrão complexo.
Por exemplo, se eu quisesse pesquisar um ponto literal (.) No meu .bash_profile, seria difícil usar grep porque teria que escapar do ponto porque dot é um meta caractere que significa 'curinga, qualquer caractere único':
grep "." myfile.txt
O comando acima retorna todas as linhas do myfile.txt. Faça isso:
fgrep "." myfile.txt
Depois, apenas as linhas que possuem um literal '.' neles são retornados. O fgrep nos ajuda a não nos incomodar em escapar de nossos meta caracteres.
pgrep é um acrônimo que significa "Impressão de expressões regulares globais de identificação de 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 o stdout. O pgrep é útil quando tudo o que você deseja saber é o número inteiro da identificação do processo. Por exemplo, se eu quisesse conhecer apenas o ID do processo mysql, usaria o comando pgrep mysql
que retornaria um ID do processo como 7312.
pgrep
manual : o nome do processo usado para correspondência é limitado aos 15 caracteres presentes na saída de / proc / pid / stat . Use a opção -f para corresponder à linha de comando completa, / proc / pid / cmdline .