Mostra a contagem correspondente de todos os arquivos que contêm uma palavra

2

Qual é o único comando usado para identificar apenas a contagem correspondente de todas as linhas dentro dos arquivos sob o diretório /etc que contém a palavra "HOST"?

Eu deveria listar apenas os arquivos com correspondências e suprimir qualquer mensagem de erro.

    
por Der Hochstapler 31.10.2010 / 22:59

4 respostas

7

Para contar as correspondências, listando apenas o (s) nome (s) do (s) nome (s) e conte (s):

grep -src HOST /etc/*

Exemplo de saída:

/etc/postfix/postfix-files:1
/etc/security/pam_env.conf:6
/etc/X11/app-defaults/Ddd.3.3.11:1
/etc/X11/app-defaults/Ddd:1
/etc/zsh/zshrc:0
/etc/zsh/zshenv:0

A opção -c suprime a saída normal e imprime uma contagem de correspondência para cada arquivo.

Se você quiser suprimir os arquivos com contagens nulas:

grep -src HOST /etc/* | grep -v ':0$'

Para imprimir o número da linha ( -n ) e o nome do arquivo ( -H ) para cada linha correspondente para qualquer número de arquivos de entrada:

grep -srnH HOST /etc/*

Exemplo de saída:

/etc/lynx-cur/lynx.cfg:254:.h2 LYNX_HOST_NAME
/etc/lynx-cur/lynx.cfg:255:# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
/etc/X11/app-defaults/Ddd.3.3.11:8005:    DDD 3.3.11 (@THEHOST@) gets @CAUSE@\n\
/etc/X11/app-defaults/Ddd:8010:    DDD 3.3.12 (@THEHOST@) gets @CAUSE@\n\

A opção -r faz com que grep pesquise recursivamente arquivos em cada subdiretório em todos os níveis no diretório especificado. A opção -s suprime as mensagens de erro.

Para suprimir correspondências de arquivos binários, use a opção -I .

Veja man grep para mais informações.

    
por 01.11.2010 / 04:09
1

Não é um comando, mas é uma linha

algo como

 grep -r ',,HOST' . | wc -l
    
por 31.10.2010 / 23:08
1

A pergunta é um pouco estranha. Primeiro, ele pergunta pela quantidade de linhas que correspondem a todos os arquivos e, em seguida, quer que você liste os nomes dos arquivos.

Para contar as linhas correspondentes em todos os arquivos:

grep -R "HOST" /etc 2> /dev/null | wc -l

Para listar os nomes dos arquivos:

grep -Rl "HOST" /etc 2> /dev/null
    
por 01.11.2010 / 02:08
1
grep -c HOST *

... deve fazê-lo.

    
por 01.11.2010 / 00:12