contare il numero di righe nell'uscita del terminale


265

non sono riuscito a trovarlo su SO. Ho eseguito il seguente comando nel terminale:

>> grep -Rl "curl" ./

e questo visualizza l'elenco dei file in cui si verifica l'arricciamento della parola chiave. Voglio contare il numero di file. Il primo modo in cui riesco a pensare è contare il numero di linee nell'output che è arrivato nel terminale. Come lo posso fare?


40
grep stesso ha anche la -cbandiera che restituisce solo il conteggio
EaterOfCode

Risposte:


476

Inoltra il risultato wcall'utilizzo dell'interruttore -l( conteggio righe ):

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

1
Sto usando grep "" -cma questo è molto più bello :)
ninhenzo64,

3
Va notato che questo trucco di piping su wc funzionerà per qualsiasi output, non solo per grep output. Ad esempio, può essere combinato con un git diff.
Jason L.

1
Perché questa è la risposta accettata? Come alcuni commenti hanno menzionato, la funzione build in grep -cdovrebbe essere utilizzata invece di reindirizzare l'output a un altro programma. Ad esempio, non cambieresti nemmeno i caratteri nel tuo documento Word con un altro editor di testo diverso da Word, vero?
Michael P,

57

Inserendo qui il commento di EaterOfCode come risposta.

grep stesso ha anche il flag -c che restituisce solo il conteggio

Quindi il comando e l'output potrebbero apparire così.

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

MODIFICARE:

Sebbene questa risposta potrebbe essere più breve e quindi potrebbe sembrare migliore della risposta accettata (che sta utilizzando wc). Non sono più d'accordo con questo. Mi sento di ricordare che puoi contare le linee eseguendo il piping su wc -lè molto più utile in quanto puoi usarlo anche con altri programmi grep.


5

Eseguire il piping su 'wc' potrebbe essere migliore SE l'ultima riga termina con una nuova riga (so che in questo caso lo farà)
Tuttavia, se l'ultima riga non termina con una nuova riga 'wc -l' restituisce un risultato falso.

Per esempio:

$ echo "asd" | wc -l

Torneremo 1e

$ echo -n "asd" | wc -l

Sarà di ritorno 0


Quindi quello che uso spesso è grep <anything> -c

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

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

Questo è più vicino alla realtà di ciò wc -lche tornerà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.