compter le nombre de lignes dans la sortie du terminal

265

n'a pas pu trouver cela 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 se produit. Je veux compter le nombre de fichiers. La première façon dont je peux penser, est de compter le nombre de lignes dans la sortie qui sont arrivées dans le terminal. Comment puis je faire ça?

roopunk
la source
40
grep lui-même a également le -cdrapeau qui renvoie simplement le nombre
EaterOfCode

Réponses:

476

Dirigez le résultat à l' wcaide du commutateur -l( nombre de lignes ):

grep -Rl "curl" ./ | wc -l
João Silva
la source
1
J'utilise grep "" -cmais c'est beaucoup plus agréable :)
ninhenzo64
3
Il convient de noter que cette astuce de canalisation vers wc fonctionnera pour n'importe quelle sortie, pas seulement pour la sortie grep. Par exemple, il peut être combiné avec un diff git.
Jason L.
1
Pourquoi est-ce la réponse acceptée? Comme certains commentaires l'ont mentionné, la fonction de construction grep -cdoit être utilisée au lieu de diriger la sortie vers un autre programme. Par exemple, vous ne changeriez même pas les caractères de votre document Word avec un autre éditeur de texte que Word, n'est-ce pas?
Michael P
57

Mettre le commentaire de EaterOfCode ici comme réponse.

grep lui-même a également le drapeau -c qui renvoie simplement le nombre

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

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

ÉDITER:

Bien que cette réponse puisse être plus courte et donc sembler meilleure que la réponse acceptée (qui utilise wc). Je ne suis plus d'accord avec cela. J'ai l'impression de me souvenir que vous pouvez compter les lignes par tuyauterie vers wc -lest beaucoup plus utile car vous pouvez l'utiliser avec d'autres programmes grep.

JelteF
la source
5

Le piping vers 'wc' pourrait être meilleur SI la dernière ligne se termine par une nouvelle ligne (je sais que dans ce cas, ça le sera)
Cependant, si la dernière ligne ne se termine pas avec une nouvelle ligne 'wc -l' renvoie un faux résultat.

Par exemple:

$ echo "asd" | wc -l

Reviendra 1et

$ echo -n "asd" | wc -l

Reviendra 0


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

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

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

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

GCS
la source