подсчитать количество строк в выводе терминала

265

не мог найти это на SO. Я запустил следующую команду в терминале:

>> grep -Rl "curl" ./

и это отображает список файлов, где происходит ключевое слово curl. Я хочу посчитать количество файлов. Первый способ, который я могу придумать, - это подсчитать количество строк в выводе, поступившем в терминал. Как я могу это сделать?

roopunk
источник
40
У самого grep также есть -cфлаг, который просто возвращает счетчик
EaterOfCode
Связано: unix.stackexchange.com/questions/248245/…
Алик Эльзин-килака

Ответы:

476

Передайте результат с wcпомощью переключателя -l( счетчик строк ):

grep -Rl "curl" ./ | wc -l
Жоао Силва
источник
1
Я использую, grep "" -cно это гораздо приятнее :)
ninhenzo64
3
Следует отметить, что этот прием передачи по каналу wc будет работать для любого вывода, а не только для вывода grep. Например, его можно комбинировать с git diff.
Джейсон Л.
1
Почему это принятый ответ? Как уже упоминалось в некоторых комментариях, grep -cследует использовать встроенную функцию вместо передачи вывода в другую программу. Например, вы даже не изменили бы символы в вашем документе Word с помощью другого текстового редактора, чем Word, не так ли?
Майкл П
57

Выкладываем комментарий EaterOfCode сюда как ответ.

Сам по себе grep также имеет флаг -c, который просто возвращает количество

Таким образом, команда и вывод могут выглядеть следующим образом.

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

РЕДАКТИРОВАТЬ:

Хотя этот ответ может быть короче и, следовательно, может показаться лучше, чем принятый ответ (который используется wc). Я не согласен с этим больше. Я чувствую, что вспоминать, что вы можете считать строки по трубопроводу, wc -lгораздо полезнее, так как вы можете использовать его с другими программами, чем с другими grep.

JelteF
источник
5

Трубопровод к 'wc' может быть лучше, если последняя строка заканчивается новой строкой (я знаю, что в этом случае это будет)
Однако, если последняя строка не заканчивается новой строкой, 'wc -l' возвращает ложный результат.

Например:

$ echo "asd" | wc -l

Вернется 1и

$ echo -n "asd" | wc -l

Вернется 0


Так что я часто использую это grep <anything> -c

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

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

Это ближе к реальности, чем то, wc -lчто вернется.

GCS
источник