Pesquisa de site

Como usar o comando fgrep para encontrar strings de texto em arquivos


Resumo: Neste guia para iniciantes, discutiremos alguns exemplos práticos do comando fgrep. Ao final deste guia, os usuários serão capazes de realizar operações de pesquisa de texto de forma eficiente usando a interface de linha de comando.

A pesquisa de texto é uma das operações mais comumente executadas. No entanto, esta tarefa simples rapidamente se torna demorada se os utilizadores não estiverem familiarizados com as ferramentas corretas. No Linux, existem vários utilitários de filtragem de texto, como awk, sed, cut, etc.

No entanto, no Linux, fgrep é o utilitário preferido para pesquisa de texto simples. Neste guia, discutiremos alguns exemplos práticos do comando fgrep que podem ser usados no dia a dia.

O comando fgrep no Linux pertence à família do comando grep. No entanto, é usado para procurar o padrão de string fixo em vez de expressões regulares. Portanto, o nome do comando é fgrep (GREP fixo).

A sintaxe do comando fgrep é semelhante aos outros comandos da família grep:

fgrep [OPTIONS] PATTERNS [FILES]

Para começar, vamos criar um arquivo de texto simples com o seguinte conteúdo para usar um exemplo:

cat input.txt

Aqui podemos ver que o arquivo de texto está pronto com o conteúdo da amostra. Agora vamos discutir alguns exemplos comuns do comando fgrep nos próximos exemplos.

1. Como o fgrep é diferente dos comandos grep e egrep?

Como o nome sugere, o comando fgrep é usado para procurar padrões de string fixos. Ele interpreta o padrão como uma string fixa em vez de uma expressão regular. Conseqüentemente, ele executa a operação de pesquisa de maneira eficiente em termos de tempo.

Para entender a diferença, vamos usar um caractere ponto (.) com o comando grep.

Esta expressão regular simples corresponde a qualquer caractere, exceto o final da linha:

grep ha. input.txt

Na saída acima, podemos ver que o caractere ponto (.) corresponde ao texto har, hat e has.

Agora, vamos usar o mesmo padrão com o comando fgrep e observar o resultado:

fgrep ha. input.txt

Na saída acima, podemos ver que o comando não consegue encontrar o padrão fornecido.

Isso acontece porque o comando fgrep não reconhece expressões regulares e tenta procurar pelo padrão inexistente – “ha. ”.

2. Como procurar um padrão em um arquivo

Vamos começar com o exemplo básico onde procuraremos uma string profissional em um arquivo input.txt:

fgrep professionals input.txt

Como podemos ver, a correspondência de padrões é bem-sucedida em dois lugares e é destacada em vermelho.

3. Como definir a cor de saída do Grep para padrões correspondentes

No exemplo anterior, vimos que, por padrão, o padrão correspondente é destacado em vermelho. Entretanto, podemos alterar esse comportamento atribuindo um valor diferente às variáveis de ambiente GREP_COLOR.

Vamos atribuir o valor 32 à variável de ambiente GREP_COLOR para destacar o padrão correspondente na cor verde:

export GREP_COLOR=32
fgrep professionals input.txt

Agora, antes de passar para o próximo exemplo, desmarque a variável de ambiente GREP_COLOR para ativar o comportamento padrão:

unset GREP_COLOR

4. Como pesquisar vários padrões em um arquivo

Às vezes, precisamos realizar a correspondência de padrões para várias strings. Nesses casos, podemos fornecer os padrões do arquivo de texto em vez do argumento da linha de comando.

Vamos criar um arquivo de texto que contenha vários padrões em uma linha separada:

cat pattern.txt

professionals
website

Agora, vamos usar este arquivo com a opção -f para correspondência de múltiplos padrões:

fgrep -f pattern.txt input.txt

Na saída acima, podemos ver que a correspondência de padrões é bem-sucedida para as strings profissionais e website.

5. Como limitar o número de correspondências em um arquivo

Por padrão, o comando fgrep continua a realizar a correspondência de padrões até que todo o arquivo seja processado.

Porém, às vezes precisamos limitar o número de partidas. Nesses casos, podemos usar a opção -m com o comando:

fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

Neste exemplo, o comando fgrep interrompe o processamento do arquivo após corresponder ao primeiro padrão.

6. Como imprimir o nome do arquivo ao pesquisar o padrão

Às vezes, só precisamos encontrar o nome dos arquivos nos quais um determinado padrão está presente. Nesses casos, podemos usar a opção -l do comando fgrep:

fgrep -l professionals input.txt

input.txt

Aqui podemos ver que o comando apenas imprime o nome do arquivo em vez das linhas com os padrões correspondentes.

7. Como imprimir o nome do arquivo quando a correspondência de padrões falha

No exemplo anterior, vimos como imprimir o nome do arquivo quando a correspondência de padrões for bem-sucedida. Agora, vamos ver como realizar a operação de forma inversa.

Vamos tentar encontrar o padrão inexistente no arquivo e observar o resultado:

fgrep -L non-existing-word input.txt

input.txt

Neste exemplo, usamos a opção -L do comando que imprime o nome do arquivo quando a correspondência de padrões não é bem-sucedida.

8. Como suprimir mensagens de erro

O tratamento de erros desempenha um papel crucial ao escrever scripts de shell. No entanto, em alguns cenários não críticos, podemos ignorar com segurança as mensagens de erro.

No fgrep, podemos usar a opção -s que suprime erros relacionados a arquivos inexistentes ou ilegíveis. Para entender melhor esse comportamento, vamos tentar procurar um padrão no arquivo inexistente:

fgrep -s professionals non-existing-file.txt
echo $?

2

Na saída acima, podemos ver que o comando não exibe nenhum erro no fluxo de erros padrão. No entanto, a falha é relatada pelo valor de retorno diferente de zero.

Além disso, também podemos observar o mesmo comportamento quando o arquivo está ilegível. Então, primeiro, modifique a permissão do arquivo usando o comando chmod:

chmod 000 input.txt 
ls -l input.txt

Agora, tente buscar o padrão e observe o resultado:

fgrep -s professionals input.txt 
echo $?

9. Como excluir linhas parcialmente correspondentes

Nos exemplos anteriores, vimos que o comando fgrep realiza uma correspondência parcial. Porém, em alguns casos, precisamos realizar a correspondência exata para toda a linha. Nesses casos, podemos usar a opção -x do comando fgrep.

fgrep -nx "the same site is sometimes hard to find." input.txt

Na saída acima, a correspondência exata da linha acontece na linha número 20.

10. Como excluir arquivos durante pesquisas recursivas

Às vezes, precisamos pular determinados arquivos durante a execução de operações de pesquisa. Nesses casos, podemos usar a opção --exclude do comando fgrep.

Para entender isso, primeiro crie um diretório e copie alguns arquivos de amostra nele:

mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md 

Agora, vamos procurar o padrão em todos os arquivos do diretório dir-1, exceto nos arquivos “.txt ”:

fgrep -r --exclude *.txt professionals dir-1

Na saída acima, podemos ver que a correspondência de padrões foi realizada nos arquivos com extensões “.md ” e “.data ”.

11. Como excluir vários tipos de arquivo durante uma pesquisa recursiva

No exemplo anterior, vimos como excluir arquivos com extensões específicas. No entanto, o comando torna-se demorado quando queremos excluir arquivos com múltiplas extensões. Nesses casos, podemos fornecer o padrão de exclusão do arquivo em vez do argumento da linha de comando:

Então, vamos criar um arquivo de texto que contenha vários padrões de exclusão em uma linha separada:

cat skip-pattern.txt 
*.txt
*.data

Agora, vamos usar este arquivo com a opção --exclude-from:

fgrep -r --exclude-from skip-pattern.txt professionals dir-1

Aqui, podemos ver que a correspondência de padrões foi realizada apenas nos arquivos com extensões “.md ”.

12. Como incluir arquivos durante pesquisas recursivas

Nos exemplos anteriores, vimos como excluir arquivos ao realizar operações de pesquisa recursivamente. Agora, vamos ver como realizar a operação de forma inversa.

Vamos usar a opção --include do comando fgrep para realizar uma pesquisa nos arquivos com a extensão “*.txt ”:

fgrep -r --include "*.txt" professionals dir-1

Na saída acima, podemos ver que a correspondência de padrões é ignorada para os arquivos com extensões “*.md ” e “*.data ”.

Neste artigo, discutimos alguns exemplos úteis do comando fgrep. Os iniciantes podem usar esses exemplos na vida cotidiana para melhorar a produtividade ao trabalhar com Linux.

Você conhece algum outro exemplo melhor do comando fgrep no Linux? Deixe-nos saber sua opinião nos comentários abaixo.