GEEKS

Como excluir padrões, arquivos e diretórios com grep

Publicidade
Como excluir padrões, arquivos e diretórios com grep

fatmawati achmad zaenuri/Shutterstock.com

Desde 1974, o Linux grep command tem ajudado as pessoas a encontrar strings em arquivos. Mas às vezes grep é muito minucioso. Aqui estão várias maneiras de dizer grep ignorar coisas diferentes.

O comando grep

o grep command pesquisa arquivos de texto procurando por strings que correspondam aos padrões de pesquisa que você fornece na linha de comando. O poder de grep live no uso de expressões regulares. Eles permitem que você descreva o que está procurando, em vez de defini-lo explicitamente.

O nascimento de grep é anterior ao Linux. foi desenvolvido no início dos anos 1970 no Unix. Recebe o nome da sequência de teclas g/re/p no ed editor de linha (aliás, pronunciado “ee-dee”). Isso ficou para global, pesquisa expressa gular, pimprimir linhas correspondentes.

grep é notoriamente – talvez, notoriamente – completo e obstinado. Às vezes, ele pesquisará arquivos ou diretórios nos quais você preferiria que não perdesse pace, porque os resultados podem deixar você incapaz de ver a madeira das árvores.

Publicidade

Claro, existem maneiras de dominar o grep. Você pode dizer a ele para ignorar padrões, arquivos e diretórios para que o grep whole suas buscas mais rapidamente e você não seja inundado com falsos positivos sem sentido.

Excluindo padrões

Para pesquisar com grep você pode canalizar a entrada para ele de algum outro processo, como cat ou você pode fornecer um nome de arquivo como o último parâmetro da linha de comando.

Estamos usando um arquivo curto que contém o texto do poema Jabberwocky, de Lewis Carroll. Nestes dois exemplos, estamos procurando por linhas que correspondam ao termo de pesquisa “Jabberwock”.

cat jabberwocky.txt | grep "Jabberwock"
grep "Jabberwock" jabberwocky.textual content

Duas maneiras diferentes de pesquisar no mesmo arquivo de texto com grep

As linhas que contêm correspondências com a pista de pesquisa são listadas para nós, com o elemento correspondente em cada linha destacado em vermelho. Essa é a busca direta. Mas e se quisermos excluir linhas que contenham a palavra “Jabberwock” e imprimir o resto?

Podemos fazer isso com o -v opção (inverter correspondência). Isso lista as linhas que não correspondem ao termo de pesquisa.

grep -v "Jabberwock" jabberwocky.textual content

Usando a opção de pesquisa invertida -v com grep

As linhas que não contêm “Jabberwock” são listadas na janela do terminal.

Todas as linhas que não contêm a palavra jabberwock

Podemos excluir quantos termos desejarmos. Vamos filtrar todas as linhas que contenham “Jabberwock” e todas as linhas que contenham “e”. Para conseguir isso, usaremos o -e (expressão) opção. Precisamos usá-lo para cada padrão de pesquisa que estamos usando.

grep -v -e "Jabberwock" -e "and" jabberwocky.txt

Usando várias cláusulas de pesquisa com grep

Há uma queda correspondente no número de linhas na saída.

As linhas do texto que não correspondem a nenhum dos termos de pesquisa

Se usarmos o -E (prolonged regexes), podemos combinar os padrões de pesquisa com “|“, que neste contexto não indica um pipe, é a lógica OR operador.

grep -Ev "Jabberwock|and" jabberwocky.txt

Usando o operador lógico OR com grep

Obtemos exatamente a mesma saída que obtivemos com o comando anterior, mais longo.

As linhas do texto que não correspondem a nenhum dos termos de pesquisa

O formato do comando é o mesmo se você quiser usar um padrão regex em vez de uma pista de pesquisa explícita. Este comando excluirá todas as linhas que começam com qualquer letra no conjunto de “ACHT”.

grep -Ev "^ACHT" jabberwocky.txt

Excluindo arquivos que começam com letras específicas

Para ver linhas que contêm um padrão, mas que também não contêm outro padrão, podemos canalizar grep em grep . Procuraremos todas as linhas que contenham a palavra “Jabberwock” e, em seguida, filtraremos todas as linhas que também conter a palavra “morto”.

grep "Jabberwock" jabberwocky.txt | grep -v "slain"

Conduzindo grep em grep para filtrar duas vezes

Excluindo arquivos

Nós podemos pergutar grep para procurar uma string ou padrão em uma coleção de arquivos. Você pode listar cada arquivo na linha de comando, mas com muitos arquivos essa abordagem não é dimensionada.

grep "vorpal" verse-1.txt verse-2.txt verse-3.txt verse-4.txt verse-5.txt verse-6.txt

Pesquisando em uma lista de arquivos nomeados

Practice que o nome do arquivo que contém a linha correspondente é exibido no início de cada linha de saída.

Para reduzir a digitação, podemos usar curingas. Mas isso pode ser contra-intuitivo. Isso parece funcionar.

grep "vorpal" *.txt

Usando curingas para pesquisar uma coleção de arquivos

No entanto, neste diretório existem outros arquivos TXT, sem nada a ver com o poema. Se pesquisarmos a palavra “espada” com a mesma estrutura de comando, obteremos muitos falsos positivos.

grep "sword" *.txt

Procurando por "espada" através de uma coleção de arquivos TXT

Os resultados que queremos são mascarados pela enxurrada de resultados falsos dos outros arquivos que possuem a extensão TXT.

Um grande conjunto de resultados de falsos positivos

A palavra “vorpal” não correspondeu a nada, mas “sword” está incluída na palavra “password” por isso foi encontrada muitas vezes em alguns pseudo-logfiles.

Precisamos excluir esses arquivos. Para isso vamos usar o --exclude opção. Para excluir um único arquivo chamado “vol-log-1.txt”, usaríamos este comando:

grep --exclude=vol-log-1.txt "sword" *.txt

Neste caso, queremos excluir vários arquivos de log com nomes que começam com “vol”. A sintaxe que precisamos é:

grep --exclude=vol*.txt "sword" *.txt

Excluindo arquivos com curingas

Quando usamos o -R opção (desreferência-recursiva) grep pesquisará árvores de diretório inteiras para nós. Por padrão, ele pesquisará todos os arquivos nesses locais. Pode haver vários tipos de arquivos que desejamos excluir.

Abaixo do diretório atual nesta máquina de teste, há diretórios aninhados contendo arquivos de log, arquivos CSV e arquivos MD. Esses são todos os tipos de arquivos de texto que queremos excluir. Poderíamos usar um --exclude opção para cada tipo de arquivo, mas podemos conseguir o que queremos com mais eficiência agrupando os tipos de arquivo.

Este comando exclui todos os arquivos que possuem extensões CSV ou MD e todos os arquivos TXT cujos nomes começam com “vol” ou “log”.

grep -R --exclude=*.csv,md --exclude=vol*,log*.txt "sword" /house/dave/information/

Usando várias cláusulas --exclude e agrupamentos de nomes de arquivos

Excluindo diretórios

Se os arquivos que desejamos ignorar estiverem contidos em diretórios e não houver arquivos nesses diretórios que desejamos pesquisar, podemos excluir esses diretórios inteiros.

O conceito é muito semelhante ao de exclusão de arquivos, exceto que usamos o --exclude-dir opção e nomeie os diretórios a serem ignorados.

grep -R --exclude-dir=backup "vorpal" /house/dave/information

Excluindo um diretório da pesquisa

Excluímos o diretório “backup”, mas ainda estamos pesquisando em outro diretório chamado “backup2”.

Não será surpresa que possamos usar o --exclude-dir opção várias vezes em um único comando. Practice que o caminho para os diretórios excluídos deve ser fornecido em relação ao diretório em que a pesquisa será iniciada. Não use o caminho absoluto da raiz do sistema de arquivos.

grep -R --exclude-dir=backup --exclude-dir=backup2 "vorpal" /house/dave/information

Excluindo dois diretórios da pesquisa

Podemos usar agrupamentos também. Podemos conseguir a mesma coisa de forma mais sucinta com:

grep -R --exclude-dir=backup,backup2 "vorpal" /house/dave/information

Excluindo diretórios com agrupamento

Você pode combinar exclusões de arquivos e diretórios no mesmo comando. Se você deseja excluir todos os arquivos de um diretório e excluir determinados tipos de arquivos dos diretórios que são pesquisado, use esta sintaxe:

grep -R --exclude=*.csv,md --exclude-dir=backup/archive "frumious" /house/dave/information

Excluindo tipos de arquivo e diretórios no mesmo comando

Às vezes é o que você deixa de fora

Às vezes com grep pode parecer que você está tentando encontrar uma agulha no palheiro. faz uma grande diferença remover o palheiro.

RELACIONADO: Como usar expressões regulares (regexes) no Linux



Fonte da Notícia: www.howtogeek.com

Publicidade

Osmar Queiroz

Osmar é um editor especializado em tecnologia, com anos de experiência em comunicação digital e produção de conteúdo voltado para inovação, ciência e tecnologia.

Artigos relacionados

Botão Voltar ao topo