374 votes

compter le nombre de lignes dans la sortie du terminal

Je n'ai pas trouvé ça sur SO. J'ai exécuté la commande suivante dans le terminal :

>> grep -Rl "curl" ./

et cela affiche la liste des fichiers où le mot clé curl apparaît. Je veux compter le nombre de fichiers. Le premier moyen auquel je pense est de compter le nombre de lignes dans la sortie qui est arrivée dans le terminal. Comment puis-je faire cela ?

51 votes

Grep lui-même possède également l'option -c qui ne renvoie que le nombre d'unités

0 votes

658voto

João Silva Points 36619

Transmettez le résultat à wc en utilisant le -l ( nombre de lignes ) :

grep -Rl "curl" ./ | wc -l

6 votes

J'ai utilisé grep "" -c mais celle-ci est bien plus belle :)

7 votes

Il est à noter que cette astuce de piping vers wc fonctionnera pour n'importe quelle sortie, pas seulement la sortie grep. Par exemple, elle peut être combinée avec un diff git.

1 votes

Pourquoi est-ce la réponse acceptée ? Comme certains commentaires l'ont mentionné, la fonction intégrée grep -c doit être utilisé au lieu de diriger la sortie vers un autre programme. Par exemple, vous ne changeriez pas les caractères de votre document Word avec un autre éditeur de texte que Word, n'est-ce pas ?

67voto

JelteF Points 1339

Je mets le commentaire de EaterOfCode ici comme une réponse.

grep lui-même a également le drapeau -c qui renvoie juste le compte

Ainsi, la commande et la sortie pourraient ressembler à ceci.

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

EDIT :

Bien que cette réponse puisse être plus courte et donc sembler meilleure que la réponse acceptée (c'est-à-dire l'utilisation de wc ). Je ne suis plus d'accord avec cela. J'ai envie de rappeler que l'on peut compter les lignes en faisant un piping à wc -l est beaucoup plus utile car vous pouvez l'utiliser avec d'autres programmes que les grep également.

23voto

GCS Points 71

L'acheminement vers 'wc' pourrait être amélioré SI la dernière ligne se termine par un saut de ligne (je sais que dans ce cas, ce sera le cas).
Cependant, si la dernière ligne ne se termine pas par une nouvelle ligne, 'wc -l' renvoie un résultat erroné.

Par exemple :

$ echo "asd" | wc -l

Reviendra 1 et

$ echo -n "asd" | wc -l

Reviendra 0


Donc ce que j'utilise souvent est grep <anything> -c

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

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

C'est plus proche de la réalité que ce que wc -l reviendra.

3voto

shiva Points 775

"abcd4yyyy" | grep 4 -c donne le compte comme 1

5 votes

On ne voit pas bien ce que cela ajoute, que les autres réponses n'aient pas déjà mieux dit, près de 6 ans plus tôt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X