O nome pegada vem do comando ed (e vim) g / re / p, o 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 pegada pode ser usado para localizar texto simples em um ou mais arquivos específicos. 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 adequadamente.
Antes de tentar os exemplos, veja o arquivo de amostra:
$gatomeu arquivo
Busca Simples
Para localizar o texto ‘xyz’ dentro do arquivo, execute o seguinte:
$pegadaxyz meuarquivoUsando Cores
Para exibir cores, use –color (um hífen duplo) ou simplesmente crie um apelido. Por exemplo:
$pegada --corxyz meuarquivoou
$apelido pegada= ’pegada--cor'$pegadaxyz meuarquivo
Opções
Opções comuns usadas com o pegada comando inclui:
- -Eu encontro todas as linhas independente de caso
- -c contar quantas linhas contém o texto
- -n linha de exibição números de linhas correspondentes
- -l exibir apenas Arquivo nomes que jogada
- -r recursivo pesquisa de subdiretórios
- -v encontra todas as linhas NÃO contendo o texto
Por exemplo:
$pegada -euxyz meuarquivo# localizar texto independentemente do caso$pegada -icxyz meuarquivo# contar linhas com texto
$pegada -noxyz meuarquivo# mostrar números de linha
Crie vários arquivos
Antes de tentar pesquisar vários arquivos, primeiro crie vários novos arquivos:
$jogou foraxyz>meuarquivo1$jogou fora -Exyz nxzz nXYZ>meuarquivo2
$jogou fora -Exxx nyyy>meuarquivo3
$gatomeuarquivo1
$gatomeuarquivo2
$gatomeuarquivo3
Pesquisar vários arquivos
Para pesquisar vários arquivos usando nomes de arquivo ou um caractere curinga, digite:
$pegada -icxyz meuarquivo meuarquivo1 meuarquivo2 meuarquivo3$pegada -noxyz meu*
# corresponde a nomes de arquivo começando com 'meu'
Exercício I
- Primeiro conte quantas linhas existem no arquivo / etc / passwd.
- Agora encontre todas as ocorrências do texto Onde no arquivo / etc / passwd .
- Descubra quantas linhas no arquivo contêm o texto
- Descubra quantas linhas NÃO contêm o texto Onde .
- Encontre a entrada para o seu login no / etc / passwd
As soluções para exercícios podem ser encontradas no final deste artigo.
Usando expressões regulares
O comando pegada 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 pegada , 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 ^:
$pegada‘^ Xyz’ meuarquivoPara encontrar todas as linhas que terminam com texto usando o caractere $:
$pegada‘Xyz $’ meuarquivoPara encontrar linhas contendo uma string usando os caracteres ^ e $:
$pegada‘^ Xyz $’ meuarquivoPara encontrar linhas usando o . para combinar com qualquer personagem:
$pegada‘^ X.z’ meuarquivoPara encontrar linhas usando * para corresponder a 0 ou mais da expressão anterior:
$pegada‘^ Xy*z 'meuarquivoPara encontrar linhas usando. * Para corresponder a 0 ou mais de qualquer caractere:
$pegada‘^ X.*z 'meuarquivoPara encontrar linhas usando o para escapar do caractere *:
$pegada‘^ X *z 'meuarquivoPara encontrar o caractere, use:
$pegada'\' meu arquivoExpressão grep - egrep
o pegada comando suporta apenas um subconjunto das expressões regulares disponíveis. No entanto, o comando egrep:
- permite o uso completo de todas as expressões regulares
- pode pesquisar simultaneamente por mais de uma expressão
Observe que as expressões devem ser colocadas entre aspas.
Para usar cores, use –color ou crie novamente um alias:
$apelido 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 |
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 pegada comando não suporta todas as expressões regulares:
$pegada '(^ root | ^ uucp | ^ mail)' /etc/senhaNo entanto, na maioria dos sistemas Linux, o comando grep -E é o mesmo que usar egrep :
$pegada -E '(^ root | ^ uucp | ^ mail)' /etc/senhaUsando 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 costumam ser 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 pegada comando. Saída do pegada comando é então passado como entrada para o mais comando.
Isso exibirá apenas os diretórios em / etc :
$ls -a /etc|pegada‘^ D’|maisOs comandos a seguir são exemplos de uso de filtros:
$ps -ef|pegadacron $quem|pegadakdmArquivo 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:
Pessoal J.Smith 25000Personal E.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
Andar T.Smythe 30500
Pessoal J.Maler 33000
Exercício II
- Exibir o arquivo pessoas e examine seu conteúdo.
- Encontre todas as linhas que contêm a string Smith no arquivo people.Hint: use o comando grep, mas lembre-se que, por padrão, ele diferencia maiúsculas de minúsculas.
- 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>.
- Confirme o conteúdo do arquivo npeople listando o arquivo.
- 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 >>.
- Novamente, confirme o conteúdo do arquivo npeople listando o arquivo.
- Encontre o endereço IP do servidor que está armazenado no arquivo / etc / hosts .Dica: use o comando grep com $ (hostname)
- 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 para 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 pegada tem apenas suporte de expressão regular limitado. 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 ’meuarquivoPara encontrar linhas usando | para corresponder a qualquer uma das expressões dentro de uma string, também use ():
$egrep‘^ X(Yz|sim)' meu arquivoPara encontrar linhas usando [] para corresponder a qualquer caractere:
$egrep‘^ X[Yy]z 'meuarquivoPara encontrar linhas usando [] para NÃO corresponder a nenhum caractere:
$egrep‘^ X[^ Yy]z 'meuarquivoPara encontrar linhas usando * para corresponder a 0 ou mais da expressão anterior:
$egrep‘^ Xy*z 'meuarquivoPara encontrar linhas usando o + para corresponder a 1 ou mais da expressão anterior:
$egrep‘^ Xy + z’ meuarquivoPara encontrar linhas usando o? para corresponder a 0 ou 1 da expressão anterior:
$egrep‘^ Xy? Z’ meuarquivoExercício III
- Encontre todas as linhas que contêm os nomes Evans ou pintor no arquivo pessoas.
- Encontre todas as linhas que contêm os nomes Smith, Smyth ou Smythe no arquivo pessoas.
- Encontre todas as linhas que contêm os nomes Brown, Browen ou Fonte no arquivo pessoas. Se você tiver tempo:
- Encontre a linha que contém a string (admin), incluindo os colchetes, no arquivo pessoas.
- Encontre a linha que contém o caractere * no arquivo pessoas.
- 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 'meuarquivoPara 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 'meuarquivoPara encontrar linhas usando {} para corresponder N vezes, mas não mais do que M vezes:
$egrep‘^ Xy{2,3}z 'meuarquivoConclusão
Neste tutorial, vimos primeiro como usar pegada na 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 pegada comandos em seus próprios dados e lembre-se, as expressões regulares conforme descrito aqui podem ser usadas da mesma forma em nós , 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 Onde no arquivo / etc / passwd.
$ grep var /etc/passwd
Descubra quantas linhas no arquivo contêm o texto Onde
Descubra quantas linhas NÃO contêm o texto Onde .
pegada -cvOnde/etc/senhaEncontre a entrada para o seu login no / etc / passwd Arquivo
grep kdm /etc/passwd
Exercício II
Exibir o arquivo pessoas e examine seu conteúdo.
$ cat people
Encontre todas as linhas que contêm a string Smith no arquivo pessoas .
$ grep 'Smith' people
Crie um novo arquivo, npessoas , contendo todas as linhas que começam com a string Pessoal no pessoas Arquivo
$ grep '^Personal' people> npeople
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$' people>>npeople
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 pintor no arquivo pessoas .
$ egrep 'Evans|Maler' people
Encontre todas as linhas que contêm os nomes Smith , Smyth ou Smythe no arquivo pessoas .
$ egrep 'Sm(i|y)the?' people
Encontre todas as linhas que contêm os nomes marrom , Browen ou Fonte no arquivo pessoas.
$ egrep 'Brow?e?n' people
Encontre a linha que contém a string (admin), incluindo os colchetes, no arquivo pessoas .
Encontre a linha que contém o personagem * no arquivo pessoas.
$ egrep '*' people
Combine 5 e 6 acima para encontrar ambas as expressões.