grep

Usando grep (e egrep) com expressões regulares

Usando grep (e egrep) com expressões regulares
Este tutorial descreve como usar ambos grep (e egrep) to encontrar texto em arquivos, em sua forma simples e quando combinado com expressões regulares. Contém vários exemplos e exercícios, mais soluções, para o visualizador completar.

O nome grep vem do comando ed (e vim) “g / re / p”, que significa pesquisar globalmente por uma dada expressão regular e imprimir (exibir) a saída.

Regular Expressões

Os utilitários permitem ao usuário pesquisar arquivos de texto em busca de linhas que correspondam a uma expressão regular (regexp). Uma expressão regular é uma string de pesquisa composta de texto e um ou mais de 11 caracteres especiais. Um exemplo simples é combinar o início de uma linha.

Arquivo de amostra

A forma básica de grep pode ser usado para encontrar texto simples dentro de um determinado arquivo ou arquivos. Para experimentar os exemplos, primeiro crie o arquivo de amostra.

Use um editor como o nano ou vim para copiar o texto abaixo em um arquivo chamado meu arquivo.

xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x * z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Embora você possa copiar e colar os exemplos no texto (observe que as aspas duplas podem não ser copiadas corretamente), os comandos precisam ser digitados para aprendê-los corretamente.

Antes de tentar os exemplos, veja o arquivo de amostra:

$ cat meuarquivo

Pesquisa Simples

Para localizar o texto 'xyz' dentro do arquivo, execute o seguinte:

$ grep xyz meuarquivo

Usando Cores

Para exibir cores, use -color (um hífen duplo) ou simplesmente crie um alias. Por exemplo:

$ grep --color xyz meuarquivo

ou

$ alias grep = 'grep --color'
$ grep xyz meuarquivo

Opções

Opções comuns usadas com o grep comando inclui:

Por exemplo:

$ grep -i xyz meuarquivo # localizar texto independentemente do caso
$ grep -ic xyz meuarquivo # contar linhas com texto
$ grep -in xyz meuarquivo # mostra os números das linhas

Crie vários arquivos

Antes de tentar pesquisar vários arquivos, primeiro crie vários novos arquivos:

$ echo xyz> meuarquivo1
$ echo -e “xyz \ nxzz \ nXYZ”> meuarquivo2
$ echo -e “xxx \ nyyy”> meuarquivo3
$ cat meuarquivo1
$ cat meuarquivo2
$ cat meuarquivo3

Pesquisar vários arquivos

Para pesquisar vários arquivos usando nomes de arquivo ou um caractere curinga, digite:

$ grep -ic xyz meuarquivo meuarquivo1 meuarquivo2 meuarquivo3
$ grep -in xyz my * 
# corresponde a nomes de arquivo começando com 'meu'

Exercício I

  1. Primeiro conte quantas linhas existem no arquivo / etc / passwd.
Dica: use wc -l / etc / passwd
  1. Agora encontre todas as ocorrências do texto var no arquivo / etc / passwd.
  2. Descubra quantas linhas no arquivo contêm o texto
  3. Descubra quantas linhas NÃO contêm o texto var.
  4. Encontre a entrada para o seu login no / etc / passwd

As soluções de exercícios podem ser encontradas no final deste artigo.

Usando expressões regulares

O comando grep também pode ser usado com expressões regulares usando um ou mais dos onze caracteres ou símbolos especiais para refinar a pesquisa. Uma expressão regular é uma string de caracteres que inclui caracteres especiais para permitir a correspondência de padrões em utilitários como grep, vim e sed. Observe que as strings podem precisar ser colocadas entre aspas.

Os caracteres especiais disponíveis incluem:

^ Início de uma linha
$ Fim de linha
. Qualquer caractere (exceto \ n nova linha)
* 0 ou mais da expressão anterior
\ Preceder um símbolo torna-o um caractere literal

Observe que o *, que pode ser usado na linha de comando para corresponder a qualquer número de caracteres, incluindo nenhum, é não usado da mesma forma aqui.

Observe também o uso de aspas nos exemplos a seguir.

Exemplos

Para localizar todas as linhas que começam com texto usando o caractere ^:

$ grep '^ xyz' meuarquivo

Para encontrar todas as linhas que terminam com texto usando o caractere $:

$ grep 'xyz $' meuarquivo

Para encontrar linhas contendo uma string usando os caracteres ^ e $:

$ grep '^ xyz $' meuarquivo

Para encontrar linhas usando o . para combinar com qualquer personagem:

$ grep '^ x.z 'meuarquivo

Para encontrar linhas usando * para corresponder a 0 ou mais da expressão anterior:

$ grep '^ xy * z' meuarquivo

Para encontrar linhas usando .* para corresponder a 0 ou mais de qualquer caractere:

$ grep '^ x.* z 'meuarquivo

Para encontrar linhas usando o \ para escapar do caractere *:

$ grep '^ x \ * z' meuarquivo

Para encontrar o \ caractere, use:

$ grep '\\' meuarquivo

Expressão grep - egrep

O grep comando suporta apenas um subconjunto das expressões regulares disponíveis. No entanto, o comando egrep:

Observe que as expressões devem ser colocadas entre um par de aspas.

Para usar cores, use -color ou crie novamente um alias:

$ alias egrep = 'egrep --color'

Para pesquisar por mais de um regex a egrep o comando pode ser escrito em várias linhas. No entanto, isso também pode ser feito usando estes caracteres especiais:

| Alternância, uma ou outra
(…) Agrupamento lógico de parte de uma expressão
$ egrep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Isso extrai as linhas que começam com root, uucp ou mail do arquivo, o | símbolo que significa qualquer uma das opções.

O seguinte comando irá não funcionar, embora nenhuma mensagem seja exibida, uma vez que o básico grep comando não suporta todas as expressões regulares:

$ grep '(^ root | ^ uucp | ^ mail)' / etc / passwd

No entanto, na maioria dos sistemas Linux, o comando grep -E é o mesmo que usar egrep:

$ grep -E '(^ ​​root | ^ uucp | ^ mail)' / etc / passwd

Usando Filtros

Tubulação é o processo de enviar a saída de um comando como entrada para outro comando e é uma das ferramentas Linux mais poderosas disponíveis.

Os comandos que aparecem em um pipeline são frequentemente chamados de filtros, pois em muitos casos eles filtram ou modificam a entrada passada a eles antes de enviar o fluxo modificado para a saída padrão.

No exemplo a seguir, a saída padrão de ls -l é passado como entrada padrão para o grep comando. Saída do grep comando é então passado como entrada para o mais comando.

Isso exibirá apenas os diretórios em / etc:

$ ls -l / etc | grep '^ d' | mais

Os comandos a seguir são exemplos de uso de filtros:

$ ps -ef | grep cron

$ who | grep kdm

Arquivo de amostra

Para tentar o exercício de revisão, primeiro crie o seguinte arquivo de amostra.

Use um editor como o nano ou vim para copiar o texto abaixo em um arquivo chamado pessoas:

J pessoal.Smith 25000
E pessoal.Smith 25400
Treinamento A.Brown 27500
Treinamento C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Pessoal F.Jones 25000
treinamento * C.Evans 25500
Goodsout W.Pope 30400
Térreo.Smythe 30500
J pessoal.Maler 33000

Exercício II

  1. Exibir o arquivo pessoas e examinar seu conteúdo.
  2. Encontre todas as linhas que contêm a string Smith no arquivo pessoas.Dica: use o comando grep, mas lembre-se de que, por padrão, diferencia maiúsculas de minúsculas.
  3. Crie um novo arquivo, npeople, contendo todas as linhas que começam com a string Pessoal no arquivo de pessoas.Dica: use o comando grep com>.
  4. Confirme o conteúdo do arquivo npeople listando o arquivo.
  5. Agora anexe todas as linhas onde o texto termina com a string 500 no arquivo pessoas para o arquivo npeople.Dica: use o comando grep com >>.
  6. Novamente, confirme o conteúdo do arquivo npeople listando o arquivo.
  7. Encontre o endereço IP do servidor que está armazenado no arquivo / etc / hosts.Dica: use o comando grep com $ (hostname)
  8. Usar egrep para extrair do / etc / passwd linhas de conta de arquivo contendo LP ou o seu próprio ID do usuário.

As soluções de exercícios podem ser encontradas no final deste artigo.

Mais expressões regulares

Uma expressão regular pode ser considerada como curingas em esteróides.

Existem onze caracteres com significados especiais: os colchetes de abertura e fechamento [], a barra invertida \, o circunflexo ^, o cifrão $, o ponto ou ponto ., a barra vertical ou o símbolo de barra vertical |, o ponto de interrogação ?, o asterisco ou estrela *, o sinal de mais + e os colchetes de abertura e fechamento . Esses caracteres especiais também são chamados de metacaracteres.

Aqui está o conjunto completo de caracteres especiais:

^ Início de uma linha
$ Fim de linha
. Qualquer caractere (exceto \ n nova linha)
* 0 ou mais da expressão anterior
| Alternância, uma ou outra
[…] Conjunto explícito de caracteres para combinar
+ 1 ou mais da expressão anterior
? 0 ou 1 da expressão anterior
\ Preceder um símbolo torna-o um caractere literal
Notação quantificadora explícita
(…) Agrupamento lógico de parte de uma expressão

A versão padrão de grep tem apenas suporte limitado de expressão regular. Para que todos os exemplos a seguir funcionem, use egrep em vez ou grep -E.

Para encontrar linhas usando o | para corresponder a uma das expressões:

$ egrep 'xxz | xzz' meuarquivo

Para encontrar linhas usando | para corresponder a qualquer uma das expressões dentro de uma string, use ():

$ egrep '^ x (Yz | yz)' meuarquivo

Para encontrar linhas usando [] para corresponder a qualquer caractere:

$ egrep '^ x [Yy] z' meuarquivo

Para encontrar linhas usando [] para NÃO corresponder a nenhum caractere:

$ egrep '^ x [^ Yy] z' meuarquivo

Para encontrar linhas usando * para corresponder a 0 ou mais da expressão anterior:

$ egrep '^ xy * z' meuarquivo

Para encontrar linhas usando o + para corresponder a 1 ou mais da expressão anterior:

$ egrep '^ xy + z' meuarquivo

Para encontrar linhas usando o ? para corresponder a 0 ou 1 da expressão anterior:

$ egrep '^ xy?z 'meuarquivo

Exercício III

  1. Encontre todas as linhas que contêm os nomes Evans ou Maler no arquivo pessoas.
  2. Encontre todas as linhas que contêm os nomes Smith, Smyth ou Smythe no arquivo pessoas.
  3. Encontre todas as linhas que contêm os nomes Brown, Browen ou Bron no arquivo pessoas.Se você tem tempo:
  4. Encontre a linha que contém a string (admin), incluindo os colchetes, no arquivo pessoas.
  5. Encontre a linha que contém o caractere * no arquivo pessoas.
  6. Combine 5 e 6 acima para encontrar ambas as expressões.

Mais exemplos

Para encontrar linhas usando . e * para corresponder a qualquer conjunto de caracteres:

$ egrep '^ xy.* z 'meuarquivo

Para encontrar linhas usando para corresponder ao número N de caracteres:

$ egrep '^ xy 3 z' meuarquivo
$ egrep '^ xy 4 z' meuarquivo

Para encontrar linhas usando para corresponder N ou mais vezes:

$ egrep '^ xy 3, z' meuarquivo

Para encontrar linhas usando para corresponder N vezes, mas não mais do que M vezes:

$ egrep '^ xy 2,3 z' meuarquivo

Conclusão

Neste tutorial, vimos primeiro como usar grep em sua forma simples de encontrar texto em um arquivo ou em vários arquivos. Em seguida, combinamos o texto a ser pesquisado com expressões regulares simples e, em seguida, outras mais complexas usando egrep.

Próximos passos

Espero que você faça bom uso do conhecimento adquirido aqui. Experimentar grep comandos em seus próprios dados e lembre-se, as expressões regulares conforme descrito aqui podem ser usadas da mesma forma em vi, sed e awk!

Soluções de exercícios

Exercício I

Primeiro conte quantas linhas existem no arquivo / etc / passwd.
$ wc -l / etc / passwd
Agora encontre todas as ocorrências do texto var no arquivo / etc / passwd.
$ grep var / etc / passwd
Descubra quantas linhas no arquivo contêm o texto var

grep -c var / etc / passwd

Descubra quantas linhas NÃO contêm o texto var.

grep -cv var / etc / passwd

Encontre a entrada para o seu login no / etc / passwd Arquivo
grep kdm / etc / passwd

Exercício II

Exibir o arquivo pessoas e examinar seu conteúdo.
$ cat pessoas
Encontre todas as linhas que contêm a string Smith no arquivo pessoas.
$ grep 'Smith' pessoas
Crie um novo arquivo, npessoas, contendo todas as linhas que começam com a string Pessoal no pessoas Arquivo
$ grep '^ Pessoal' pessoas> npessoas
Confirme o conteúdo do arquivo npessoas listando o arquivo.
$ cat npeople
Agora anexe todas as linhas onde o texto termina com a string 500 no arquivo pessoas para o arquivo npessoas.
$ grep '500 $' pessoas >> npessoas
Novamente, confirme o conteúdo do arquivo npessoas listando o arquivo.
$ cat npeople
Encontre o endereço IP do servidor que está armazenado no arquivo / etc / hosts.
$ grep $ (hostname) / etc / hosts
Usar egrep para extrair do / etc / passwd linhas de conta de arquivo contendo LP ou seu próprio ID de usuário.
$ egrep '(lp | kdm :)' / etc / passwd

Exercício III

Encontre todas as linhas que contêm os nomes Evans ou Maler no arquivo pessoas.
$ egrep 'Evans | Maler' pessoas
Encontre todas as linhas que contêm os nomes Smith, Smyth ou Smythe no arquivo pessoas.
$ egrep 'Sm (i | y) o?' pessoas
Encontre todas as linhas que contêm os nomes Castanho, Browen ou Bron no arquivo pessoas.
$ egrep 'Brow?e?n 'pessoas
Encontre a linha que contém a string (admin), incluindo os colchetes, no arquivo pessoas.

$ egrep '\ (Admin \)' pessoas

Encontre a linha que contém o personagem * no arquivo pessoas.
$ egrep '\ *' pessoas
Combine 5 e 6 acima para encontrar ambas as expressões.

$ egrep '\ (Admin \) | \ *' pessoas


Tutorial OpenTTD
OpenTTD é um dos jogos de simulação de negócios mais populares que existem. Neste jogo, você precisa criar um maravilhoso negócio de transporte. No en...
SuperTuxKart para Linux
SuperTuxKart é um ótimo título projetado para trazer a você a experiência Mario Kart gratuitamente em seu sistema Linux. É bastante desafiador e diver...
Tutorial de Battle for Wesnoth
The Battle for Wesnoth é um dos jogos de estratégia de código aberto mais populares que você pode jogar no momento. Este jogo não está apenas em desen...