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