O nome grep vem do comando ed (e vim) “g/re/p”, o que significa procurar globalmente uma determinada expressão regular e imprimir (exibir) a saída.
Regular Expressões
Os utilitários permitem que o usuário pesquise arquivos de texto por linhas que correspondam a uma expressão regular (regexp). Uma expressão regular é uma sequência de pesquisa composta de texto e um ou mais de 11 caracteres especiais. Um exemplo simples é corresponder ao início de uma linha.
Arquivo de amostra
A forma básica de grep pode ser usado para encontrar texto simples em um específico arquivo ou arquivos. Para tentar os exemplos, primeiro crie o arquivo de amostra.
Use um editor como 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 cotações duplas podem não copiar corretamente), os comandos precisam ser digitados para aprendê -los corretamente.
Antes de experimentar os exemplos, veja o arquivo de amostra:
gato myfileXYZ
Pesquisa simples
Para encontrar o texto 'xyz' dentro do arquivo, execute o seguinte:
grep xyz myfileXYZ
Opções
Opções comuns usadas com o grep Comando incluir:
Por exemplo:
grep -i xyz myfileXYZ
# Encontre o texto independentemente do caso
grep -ic xyz myfile7
# contagem de linhas com texto
grep -in xyz myfile1: XYZ
# Mostrar números de linha
Crie vários arquivos
Antes de tentar pesquisar vários arquivos, primeiro crie vários novos arquivos:
eco xyz> myfile1XYZ
gato myfile1
echo -e 'xyz \ nxzz \ nxyz'> myfile2XYZ
gato myfile2
eco -e 'xxx \ nyyy'> myFile3xxx
gato myfile3
Pesquise vários arquivos
Para pesquisar vários arquivos usando os nomes de arquivos ou um curinga Enter:
grep -ic xyz myfile myfile1 myfile2 myfile3MyFile: 7
# combine nomes de arquivos começando com 'meu'MyFile: 1: XYZ
grep -no xyz meu*
Exercício i
Dica: use wc -l /etc /passwd
Soluções de exercício 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 onze caracteres especiais ou símbolos para refinar a pesquisa. Uma expressão regular é uma sequência de caracteres que inclui caracteres especiais para permitir a correspondência de padrões dentro de serviços públicos, como grep, vim e sed. Observe que as cordas podem precisar ser fechadas em cotações.
Os personagens especiais disponíveis incluem:
^ | Começo de uma linha |
$ | Fim de uma linha |
. | Qualquer personagem (exceto \ n newline) |
* | 0 ou mais da expressão anterior |
\ | Preceder um símbolo o torna um caráter 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 maneira aqui.
Observe também o uso de citações nos seguintes exemplos.
Exemplos
Para encontrar todas as linhas começando com o texto usando o caractere ^:
grep '^xyz' myfile
Para encontrar todas as linhas que terminam com o texto usando o caractere $:
grep 'xyz $' myfile
Para encontrar linhas contendo uma string usando os caracteres ^ e $:
grep '^xyz $' myfile
Para encontrar linhas usando o . Para combinar com qualquer personagem:
grep '^x.z 'myfile
Para encontrar linhas usando o * para corresponder 0 ou mais da expressão anterior:
grep '^xy*z' myfile
Para encontrar linhas usando .* Para combinar 0 ou mais de qualquer personagem:
grep '^x.*z 'myfile
Para encontrar linhas usando o \ Para escapar do personagem *:
grep '^x \*z' myfile
Para encontrar o uso de \ caracteres:
grep '\\' myfile
Expressão grep - egrep
O grep O comando suporta apenas um subconjunto das expressões regulares disponíveis. No entanto, o comando egrep:
Observe que as expressões devem ser fechadas em um par de cotações.
Para procurar mais de um regex o egrep O comando pode ser escrito em várias linhas. No entanto, isso também pode ser feito usando esses caracteres especiais:
| | Alternância, uma ou outra |
(…) | Agrupamento lógico de parte de uma expressão |
egrep '(^root |^uucp |^e -mail)' /etc /passwd
Isso extrai as linhas que começam com raiz, UUCP ou e -mail do arquivo, o | símbolo significando qualquer uma das opções.
O seguinte comando irá não trabalho, embora nenhuma mensagem seja exibida, pois o básico grep O comando não suporta todas as expressões regulares:
grep '(^root |^uucp |^e -mail)' /etc /passwd
No entanto, na maioria dos sistemas Linux, o comando grep -e é o mesmo que usar egrep:
grep -e '(^root |^uucp |^e -mail)' /etc /passwd
Usando filtros
Tubulação é o processo de envio da 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, peneiram ou modificam a entrada passada para eles antes de enviar o fluxo modificado para saída padrão.
No exemplo a seguir, saída padrão de ls -l é passado como entrada padrão para o grep comando. Saída do grep O comando é então passado como entrada para o mais comando.
Isso exibirá apenas diretórios em /etc:
ls -l /etc | grep '^d' | mais
Os seguintes comandos são exemplos de uso de filtros:
ps -ef | grep cron
Quem | Grep KDM
Arquivo de amostra
Para experimentar o exercício de revisão, primeiro crie o seguinte arquivo de amostra.
Use um editor como Nano ou Vim para copiar o texto abaixo em um arquivo chamado pessoas:
J.Smith 25000
Pessoal e.Smith 25400
Treinamento a.Brown 27500
Treinamento c.Browen 23400
(Admin) r.Bron 30500
Bensout t.Smyth 30000
Pessoal f.Jones 25000
Treinamento* c.Evans 25500
Bensout w.POPE 30400
Adorado T.Smythe 30500
J.Maler 33000
Exercício II
Soluções de exercício podem ser encontradas no final deste artigo.
Expressões mais regulares
Uma expressão regular pode ser pensada como curingas em esteróides.
Existem onze caracteres com significados especiais: os colchetes de abertura e fechamento [], a barra de barra ., A barra vertical ou símbolo do tubo |, o ponto de interrogação ?, The Asterisk ou Star *, o sinal de plus + e o suporte redondo de abertura e fechamento . Esses personagens especiais também são chamados de metacaracters.
Aqui está o conjunto completo de caracteres especiais:
^ | Começo de uma linha |
$ | Fim de uma linha |
. | Qualquer personagem (exceto \ n newline) |
* | 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 o torna um caráter literal |
… | Notação de quantificador explícito |
(…) | Agrupamento lógico de parte de uma expressão |
A versão padrão de grep tem apenas suporte de expressão regular limitado. Para que todos os exemplos a seguir funcionem, use egrep em vez disso grep -e.
Para encontrar linhas usando o | Para combinar com qualquer expressão:
egrep 'xxz | xzz' myfile
Para encontrar linhas usando | Para corresponder a qualquer expressão em uma string também use ():
egrep '^x (yz | yz)' myfile
Para encontrar linhas usando [] para corresponder a qualquer personagem:
egrep '^x [yy] z' myfile
Para encontrar linhas usando [] para não corresponder a nenhum personagem:
egrep '^x [^yy] z' myfile
Para encontrar linhas usando o * para corresponder 0 ou mais da expressão anterior:
egrep '^xy*z' myfile
Para encontrar linhas usando o + para corresponder 1 ou mais da expressão anterior:
egrep '^xy+z' myfile
Para encontrar linhas usando o ? Para corresponder 0 ou 1 da expressão anterior:
egrep '^xy?z 'myfile
Exercício III
Mais exemplos
Para encontrar linhas usando . e * para corresponder a qualquer conjunto de caracteres:
egrep '^xy.*z 'myfile
Para encontrar linhas usando para corresponder n número de caracteres:
egrep '^xy 3 z' myFile
egrep '^xy 4 z' myFile
Para encontrar linhas usando para combinar n ou mais vezes:
egrep '^xy 3, z' myFile
Para encontrar linhas usando para corresponder n vezes, mas não mais que M vezes:
egrep '^xy 2,3 z' myFile
Conclusão
Neste tutorial, examinamos primeiro usar grep Em sua forma simples, encontrar texto em um arquivo ou em vários arquivos. Em seguida, combinamos o texto a ser pesquisado com expressões regulares simples e depois mais complexas usando egrep.
Próximos passos
Espero que você use bem o conhecimento adquirido. Experimentar grep Comandos em seus próprios dados e lembre -se, 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
Primeira conta 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
Encontre quantas linhas no arquivo contêm o texto var
grep -c var /etc /passwd
Encontre 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.
pessoas de gatos
Encontre todas as linhas que contêm a string Smith no arquivo pessoas.
Grep 'Smith' People
Crie um novo arquivo, Npeople, contendo todas as linhas começando com a string Pessoal no pessoas arquivo
Grep '^Pessoas pessoais> Npeople
Confirme o conteúdo do arquivo Npeople Listando o arquivo.
Npeople de gatos
Agora anexe todas as linhas onde o texto termina com a string 500 no arquivo pessoas para o arquivo Npeople.
Grep '500 $' People >> NPEOPS
Novamente, confirme o conteúdo do arquivo Npeople Listando o arquivo.
Npeople de gatos
Encontre o endereço IP do servidor que é armazenado no arquivo /etc/hosts.
Grep $ (nome do host) /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 contendo os nomes Evans ou Maler no arquivo pessoas.
Egrep 'Evans | Maler' People
Encontre todas as linhas contendo os nomes Smith, Smyth ou Smythe no arquivo pessoas.
egrep 'sm (i | y) o?' pessoas
Encontre todas as linhas contendo os nomes Marrom, Browen ou Bron nas pessoas de arquivo.
sobrancelha?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 * nas pessoas de arquivo.
pessoas de egrep '\*'
Combine 5 e 6 acima para encontrar as duas expressões.
Egrep '\ (admin \) | \*' pessoas