Como especificar padrões correspondentes ao excluir alguns arquivos com PATTERN em seus nomes de arquivos

1

OBSERVAÇÃO : atualizei esta pergunta a partir do que postei anteriormente e, portanto, algumas respostas podem não corresponder ao que pretendo fazer.

Eu quero pesquisar algum texto em um conjunto de arquivos em subdiretórios e simultaneamente ignorar os resultados de certos arquivos com "svn" em seus nomes de arquivos.

Como posso conseguir isso?

    
por Don't You Worry Child 18.04.2014 / 12:21

3 respostas

2

Os detalhes dependem exatamente do que você quer fazer, mas resultados negativos podem ajudar. Certos idiomas de expressões regulares, incluindo o PCRE, suportam isso. Você pode ativar os PCREs em grep com a opção -P , portanto, dependendo do padrão específico que você está procurando, você poderá fazer algo inteligente com eles, mas é muito improvável que valha a pena o esforço.

Depois de ler sua atualização, existem maneiras muito melhores de fazer isso. grep oferece a opção -exclude :

   --exclude=GLOB
          Skip  files  whose  base  name  matches  GLOB  (using   wildcard
          matching).   A  file-name  glob  can  use  *,  ?,  and [...]  as
          wildcards, and \ to quote  a  wildcard  or  backslash  character
          literally.

Então, você poderia simplesmente fazer

grep -Inr TEXT --exclude='*.svn' dir/
    
por 18.04.2014 / 12:58
1

Não há como fazer uma pesquisa positiva ( grep ) e uma pesquisa negativa ( grep -v ). A alternativa seria usar -E (ou egrep , que é a mesma coisa) e fornecer uma expressão regular correspondente que correspondesse a uma cadeia mas não correspondesse à outra.

    
por 18.04.2014 / 12:33
0

Caso você descubra que precisa de um controle mais sofisticado dos arquivos que você está oferecendo do que o --exclude , você pode usar find para produzir a lista de arquivos para o grep:

$ grep 'whatever_you_want_to_find' $(find wherever_you_want_to_search -not -iregex 'whatever_you_want_to_ignore')

    
por 18.04.2014 / 13:26

Tags