contar o número de linhas na saída do terminal

265

não foi possível encontrar isso no SO. Eu executei o seguinte comando no terminal:

>> grep -Rl "curl" ./

e isso exibe a lista de arquivos em que ocorre a curvatura da palavra-chave. Eu quero contar o número de arquivos. A primeira maneira que consigo pensar é contar o número de linhas na saída que vieram no terminal. Como eu posso fazer isso?

roopunk
fonte
40
-se grep também tem a -cbandeira, que só retorna a contagem
EaterOfCode
Veja também: unix.stackexchange.com/questions/248245/…
AlikElzin-kilaka

Respostas:

476

Canalize o resultado wcusando a opção -l( contagem de linhas ):

grep -Rl "curl" ./ | wc -l
João Silva
fonte
1
Eu tenho usado grep "" -c, mas esta é uma muito mais agradável :)
ninhenzo64
3
Deve-se notar que esse truque de canalizar para o wc funcionará para qualquer saída, não apenas para a saída grep. Por exemplo, ele pode ser combinado com um diff git.
Jason L.
1
Por que essa é a resposta aceita? Como alguns comentários mencionaram, a função build in grep -cdeve ser usada em vez de canalizar a saída para outro programa. Por exemplo, você não mudaria os caracteres no seu documento do Word com outro editor de texto que não o Word?
Michael P
57

Colocando o comentário de EaterOfCode aqui como resposta.

O próprio grep também possui a bandeira -c, que apenas retorna a contagem

Portanto, o comando e a saída podem ficar assim.

$ grep -Rl "curl" ./ -c
24

EDITAR:

Embora essa resposta possa ser mais curta e, portanto, possa parecer melhor que a resposta aceita (que está sendo usada wc). Eu não concordo mais com isso. Sinto que lembrar que é possível contar linhas por canal wc -lé muito mais útil, pois você pode usá-lo com outros programas greptambém.

JelteF
fonte
5

A canalização para 'wc' poderia ser melhor se a última linha terminar com uma nova linha (eu sei que, neste caso, será)
No entanto, se a última linha não terminar com uma nova linha 'wc -l' retornará um resultado falso.

Por exemplo:

$ echo "asd" | wc -l

Retornará 1e

$ echo -n "asd" | wc -l

Retornará 0


Então, o que eu costumo usar é grep <anything> -c

$ echo "asd" | grep "^.*$" -c
1

$ echo -n "asd" | grep "^.*$" -c
1

Isso está mais próximo da realidade do que o wc -lque retornará.

GCS
fonte