Eu gostaria de um passeio por sobre as diferenças entre grep
, pgrep
, egrep
, e fgrep
e como eu iria usá-los.
linux
command-line
grep
Eric Leschinski
fonte
fonte
Respostas:
Diferenças entre grep, pgrep, egrep e fgrep (Linux):
grep
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 imprime os resultados da pesquisa na tela (stdout) e retorna os seguintes valores de saída:
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
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.
egrep, por outro lado, trata o "+" como um meta caractere e retorna todas as linhas porque plus é interpretado como "uma ou mais vezes".
Aqui cada linha é retornada porque
+
foi tratada pelo egrep como um meta caractere. o grep normal teria pesquisado apenas linhas com um literal+
.fgrep
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':
O comando acima retorna todas as linhas do myfile.txt. Faça isso:
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
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.fonte
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 .