Uma das ferramentas de pesquisa renomadas em sistemas semelhantes ao Unix que pode ser usada para pesquisar qualquer coisa, seja um arquivo, ou uma linha ou várias linhas em um arquivo, é o utilitário grep. É muito vasto em funcionalidade, o que pode ser atribuído ao grande número de opções que suporta, como: pesquisar usando padrão de string ou padrão reg-ex ou reg-ex baseado em perl etc.
Devido às suas funcionalidades variadas, tem muitas variantes, incluindo grep, egrep (GREP estendido), fgrep (GREP fixo), pgrep (Processo GREP), rgrep (GREP recursivo) etc. Mas essas variantes têm pequenas diferenças em relação ao original grep o que os tornou populares e podem ser usados por vários programadores de Linux para tarefas específicas.
A principal coisa que ainda precisa ser investigada é quais são as diferenças entre as três variantes principais, ou seja, ‘Grep’, ‘Egrep’ e ‘Fgrep’ de grep que faz com que os usuários do Linux escolham uma ou outra versão conforme o requisito.
+
- Equivalente a uma ou mais ocorrências do personagem anterior.?
- Isso denota quase 1 repetição do personagem anterior. Como: uma?
Corresponderia 'uma' ou ‘Aa’.(
- Início da expressão de alternância.)
- Fim da expressão de alternância.|
- Correspondência de qualquer uma das expressões separadas por '|'
. Como: “(A | b) cde”
corresponderia a qualquer um ‘Abcde’ ou ‘Bbcde’.{
- Este metacaractere indica o início do especificador de intervalo. Como: “A {2}”
fósforos “Aa” no arquivo, ou seja, 2 vezes.}
- Este metacaractere indica o especificador de fim de intervalo.Algumas diferenças principais entre grep, egrep e fgrep pode ser destacado como segue. Para este conjunto de exemplos, estamos assumindo que o arquivo no qual a operação está sendo realizada seja:
grep ou Impressão de expressão regular global é o principal programa de pesquisa em sistemas semelhantes ao Unix que pode pesquisar por qualquer tipo de string em qualquer arquivo ou lista de arquivos ou até mesmo a saída de qualquer comando.
Leitura sugerida:12 exemplos práticos de comando grep do Linux
Usa Expressões regulares básicas além de strings normais como um padrão de pesquisa. Em Basic Regular Expressions (BRE), metacaracteres como: '{','}'
,'(',')'
,'|'
,'+'
,'?'
perdem seu significado e são tratados como caracteres normais de string e precisam ser escapados se forem tratados como caracteres especiais.
Além disso, o grep usa o algoritmo Boyer-Moore para pesquisar rapidamente qualquer string ou expressão regular.
$ grep -C 0 '(f | g) ile' check_file. $ grep -C 0 '\ (f \ | g \) ile' check_file.
Como aqui, quando o comando é executado sem escapar '(' ')'
e '|'
em seguida, ele procurou a string completa, ou seja, “(F | g) ile”
no arquivo. Mas quando os caracteres especiais foram escapados, então em vez de tratá-los como parte de uma string, o grep os tratou como metacaracteres e procurou por palavras "Arquivo"
ou “Gile”
no arquivo.
Egrep ou grep-E é outra versão do grep ou do grep estendido. Esta versão do grep é eficiente e rápida quando se trata de procurar um padrão de expressão regular enquanto trata meta-caracteres como estão e não os substituem como strings como em grep e, portanto, você está livre do fardo de escapar eles como em grep. Ele usa ERE ou o conjunto Extended Regular Expression.
No caso de egrep, mesmo que você não escape dos metacaracteres, ele os trataria como caracteres especiais e os substituiria por seu significado especial em vez de tratá-los como parte de uma string.
$ egrep -C 0 '(f | g) ile' check_file. $ egrep -C 0 '\ (f \ | g \) ile' check_file.
Como aqui, egrep procurou por "Arquivo"
string quando os metacaracteres não foram escapados, como significaria pelo significado desses caracteres. Mas, quando esses caracteres eram escapados, egrep os tratava como parte de uma string e procurava por uma string completa “(F | g) ile”
no arquivo.
Fgrep ou o Grep corrigido ou grep -F é mais uma versão do grep que é rápido na pesquisa quando se trata de pesquisar por toda a string em vez de expressão regular, pois não reconhece as expressões regulares, nem qualquer metacaracteres. Para pesquisar qualquer string direta, esta é a versão do grep que deve ser selecionada.
Fgrep procura por uma string completa e nem mesmo reconhece caracteres especiais como parte da expressão regular, mesmo se escapados ou não escapados.
$ fgrep -C 0 '(f | g) ile' check_file. $ fgrep -C 0 '\ (f \ | g \) ile' check_file.
Por exemplo, quando os metacaracteres não foram escapados, o fgrep procurou pela string completa “(F | g) ile”
no arquivo, e quando os metacaracteres foram escapados, o comando fgrep procurou “\ (F \ | g \) ile”
todos os caracteres como estão no arquivo.
Já cobrimos alguns exemplos práticos do comando grep, você pode lê-los aqui, se quiser obter mais do comando grep no Linux.
Aprenda 12 exemplos práticos do comando grep do Linux
Acima destacadas estão as diferenças entre ‘Grep’, ‘Egrep’ e ‘Fgrep’. Além da diferença no conjunto de expressões regulares usadas e na velocidade de execução, os parâmetros da linha de comando rest permanecem o mesmo para todas as três versões do grep e mesmo em vez de “egrep” ou “fgrep”, “grep -E” ou “grep -F” são recomendados para ser usado.
Se você encontrar quaisquer outras diferenças entre essas três versões do grep, mencione-as em seus comentários.