Pesquisa de site

Comando Grep no Linux/UNIX


Nos sistemas Linux e Unix Grep, abreviação de \global regular expression print, é um comando usado na busca e correspondência de arquivos de texto contidos nas expressões regulares. Além disso, o comando vem pré-instalado em todas as distribuições do Linux. Neste guia, veremos o uso comum do comando grep com alguns exemplos.

Comando Grep no Linux

O comando Grep pode ser usado para localizar ou pesquisar uma expressão regular ou uma string em um arquivo de texto. Para demonstrar isso, vamos criar um arquivo de texto welcome.txt e adicionar algum conteúdo conforme mostrado.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

Ótimo! Agora estamos prontos para executar alguns comandos grep e manipular a saída para obter os resultados desejados. Para procurar uma string em um arquivo, execute o comando abaixo Sintaxe

$ grep "string" file name

OU

$ filename grep "string"

Exemplo:

$ grep "Linux" welcome.txt
$ grep "string" /path/to/file

Colorindo os resultados do Grep usando a opção --color

Se você estiver trabalhando em um sistema que não exibe a string de pesquisa ou padrão em uma cor diferente do restante do texto, use --color para destacar seus resultados. Exemplo

$ grep --color "free and opensource" welcome.txt 

Procurando por uma string recursivamente em todos os diretórios

Se você deseja pesquisar uma string em seu diretório atual e em todos os outros subdiretórios, pesquise usando o sinalizador -r conforme mostrado

$ grep -r "string-name" *

Por exemplo

$ grep -r "linux" *

Ignorando a diferenciação de maiúsculas e minúsculas

No exemplo acima, nossos resultados de pesquisa nos deram o que queríamos porque a string \Linux foi especificada em maiúsculas e também existe no arquivo em maiúsculas. Agora vamos tentar pesquisar a string em minúsculas.

$ grep "linux" file name

Nada da saída, certo? Isso ocorre porque o grep não conseguiu localizar e corresponder à string \linux, pois a primeira letra é minúscula. Para ignorar a diferenciação de maiúsculas e minúsculas, use o sinalizador -i e execute o comando abaixo

$ grep -i "linux" welcome.txt

Conte as linhas onde as strings são combinadas com a opção -c

Para contar o número total de linhas onde o padrão de string aparece ou reside, execute o comando abaixo

$ grep -c "Linux" welcome.txt

Usando Grep para inverter a saída

Para inverter a saída do Grep, use o sinalizador -v. A opção -v instrui o grep a imprimir todas as linhas que não contêm ou correspondem à expressão. A opção –v diz ao grep para inverter sua saída, o que significa que, em vez de imprimir as linhas correspondentes, faça o oposto e imprima todas as linhas que não correspondem à expressão. Voltando ao nosso arquivo, vamos exibir os números das linhas conforme mostrado. Pressione ESC no editor Vim, digite dois pontos seguido de

 set nu
$ grep -v "Linux" welcome.txt

Numere as linhas que contêm o padrão de pesquisa com a opção -n

Para numerar as linhas em que o padrão de string corresponde, use a opção -n conforme mostrado

$ grep -n "Linux" welcome.txt

Pesquise a palavra correspondente exata usando a opção -w

Passar o sinalizador -w procurará a linha que contém a palavra correspondente exata, conforme mostrado

$ grep -w "opensource" welcome.txt
$ grep -w "open" welcome.txt

NENHUM resultado será retornado porque não estamos procurando um padrão, mas uma palavra exata!

Usando pipes com grep

O comando grep pode ser usado junto com pipes para obter uma saída distinta. Por exemplo, se você quiser saber se um determinado pacote está instalado no sistema Ubuntu, execute

$ dpkg -L | grep "package-name"

Por exemplo, para descobrir se o OpenSSH foi instalado em seu sistema, canalize o comando dpkg -l para grep conforme mostrado

$ dpkg -L | grep -i "openssh"

Exibindo o número de linhas antes ou depois de um padrão de pesquisa Usando pipes

Você pode usar -A ou -B para exibir o número de linhas que precedem ou vêm após a string de pesquisa. O sinalizador -A denota as linhas que vêm após a string de pesquisa e -B imprime a saída que aparece antes da string de pesquisa. Por exemplo

$ ifconfig | grep -A 4 ens3
$ ifconfig | grep -B 4 ether

Usando grep com expressões regulares (REGEX)

O termo REGEX é um acrônimo para REGular EXpression. Um REGEX é uma sequência de caracteres usada para corresponder a um padrão. Abaixo estão alguns exemplos:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

Exemplo Para imprimir linhas começando com um determinado caractere, a sintaxe é;

grep ^character file_name

Por exemplo, para exibir as linhas que começam com a letra \d em nosso arquivo welcome.txt, executaríamos

$ grep ^d welcome.txt 
$ grep x$ welcome.txt

Obtendo ajuda com mais opções do Grep

Se você precisar aprender mais sobre o uso do comando Grep, execute o comando abaixo para obter uma prévia de outros sinalizadores ou opções que você pode usar junto com o comando.

$ grep --help