trilha / arco 2 · mexer em arquivo
o que é grep e o que ele faz
o log tem 40 mil linhas e você precisa de uma. você não vai ler. você vai perguntar: em qual linha aparece essa palavra?
em poucos minutos: o que o grep faz, as quatro opções que mudam tudo, e o filtro invertido que apaga o que não devia. a pílula fica no final.
a aula já funciona: lê, treina no terminal e faz o quiz.
escolhe a camada
em uma frase
é passar um marca-texto numa pilha de papel. só as linhas com a palavra ficam coloridas, e o resto vai para o lixo.
para quem está começando
lê linha por linha e mostra as que contêm o texto que você procurou. se nenhuma tem, não mostra nada.
a fonte da verdade
o grep lê o arquivo (ou o que chega pelo pipe) linha por linha e compara cada uma com o padrão. o código de saída é a resposta para o shell: 0 achou, 1 não achou, 2 erro.
o número por trás do nome
0, 1 e 2: achou, não achou, deu erro. o 1 não é falha do grep, é o jeito de dizer que não tem. num script com set -e, esse 1 derruba o script.
agora você
um linux de verdade, só seu, apagado quando você sai.
procura erro no servidor.log, do jeito mais simples.
grep erro servidor.logignora maiúscula e minúscula, e mostra o número de cada linha.
grep -in erro servidor.logprocura TOKEN em toda a pasta projeto, entrando nas subpastas, mostrando número e arquivo.
grep -rn TOKEN projetorepete a busca sem o .git e sem arquivos binários.
grep -rnI --exclude-dir=.git TOKEN projetoprocura uma palavra que não existe no log e pergunta o código de saída com echo $?. qual número vem?
mostra as linhas do log que NÃO contêm INFO.
grep -v INFO servidor.log
cuidado: grep -v com padrão errado deixa tudo passar
o arquivo ~/limpar.sh apaga tudo da pasta ~/dados, menos os backups, que terminam em .bak. ele lista os arquivos e passa por grep -v bakk. só que o padrão está com uma letra a mais. o -v tira só o que casa com bakk, e nenhum arquivo casa. passa tudo, e o xargs rm apaga tudo, backups inclusive. passo 1: antes de apagar, confira. rode ls ~/dados | grep -v bakk e veja a lista. os backups estão nela. não rode o ~/limpar.sh ainda. passo 2: conserte o script. abra com nano ~/limpar.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. passo 3: teste. rode ~/limpar.sh e confira com ls ~/dados que só os .bak ficaram. se algo sair errado, digite restaurar-dados.
a pílula
grep -in padrão arquivo | ignora maiúscula, mostra a linha |
grep -rnI --exclude-dir=.git padrão . | busca na pasta, sem ruído |
grep -v padrão | mostra o que NÃO casa |
com grep -v, confere antes de apagar.