grep como suprimir a exibição do arquivo não correspondente?

7

Estou tentando encontrar arquivos contendo um termo específico usando grep . Existem muitos arquivos no diretório (> 500)

Comando eu corro

$ grep 'delete' *

Saída

validate_data_stage1:0
validate_data_stage2:0
validate_data_stage3:0
validate_data_stage4:0
validate_data_stage5:0
validate_input_stage1:0
validate_input_stage2:0
validate_input_stage3:0
validate_input_stage4:0
.... and hundred of such lines

Estes são os arquivos que não contêm a correspondência dada. Eu quero suprimir essas linhas de exibição para stdout. Eu sei de -q switch, mas isso suprimiria a saída completa, o que eu não quero.

Como faço isso?

    
por mtk 22.11.2012 / 09:57

3 respostas

7

Esse é o comportamento exibido por grep -c .

Provavelmente você tem um arquivo cujo nome começa com - e contém um caractere c e você está usando o GNU grep sem configurar a variável de ambiente POSIXLY_CORRECT .

Uso:

grep -- delete *

ou melhor:

grep delete ./*

-- marca o final das opções para que esse nome de arquivo não seja considerado como uma opção (com um POSIX grep, ele não faria, já que o argumento delete da não-opção teria marcado o fim das opções), mas não resolveria o problema de um arquivo chamado - . O grep delete ./* é mais robusto, mas tem a desvantagem de gerar o ./ extra para arquivos correspondentes (embora isso possa ser considerado um bônus, já que isso ajuda a identificar nomes de arquivos que contêm caracteres de nova linha).

    
por 22.11.2012 / 14:46
7

Adicionar

| grep -v ':0$'

Não é muito elegante, mas acho que vai fazer o trabalho.

Adicionar -l ao seu comando lhe dará apenas correspondências, mas também irá suprimir o número de correspondências impressas para cada arquivo.

    
por 22.11.2012 / 10:33
6

Usando grep -l , você só receberá os arquivos que contiverem pelo menos uma correspondência.

Você precisa de informações sobre quantas correspondências existem em um arquivo? Porque você pode pular usando -c , que é usado para contar o número de correspondências em um arquivo.

edit: E como o bruxo disse, usar -I para suprimir correspondências em arquivos binários também poderia ser uma boa idéia.

    
por 22.11.2012 / 13:45