Как я могу отформатировать мой вывод grep, чтобы показать номера строк в конце строки, а также счетчик посещений?

252

Я использую grep для сопоставления строки в файле. Вот пример файла:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt возвращает

example two null,
example four null,

Как я могу возвращать согласованные строки вместе с их номерами строк следующим образом:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Я знаю, что -c возвращает общие совпадающие строки, но я не умею правильно отформатировать его, чтобы добавить total null count впереди, и я не знаю, как добавить номера строк.

Что я могу сделать?

Теги:
grep

7 ответов

410
Лучший ответ

-n возвращает номер строки.

-i - для случая игнорирования. Только для использования, если сопоставление случаев не требуется

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Объедините с awk, чтобы распечатать номер строки после матча:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Используйте подстановку команд, чтобы распечатать общий счетчик нулей:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2
  • 0
    Могу ли я отформатировать это, добавив номера строк после, а не до с помощью:?
  • 1
    Конечно, я обновил свой ответ.
Показать ещё 3 комментария
38

Используйте -n или --line-number.

Зайдите man grep для получения большего количества опций.

  • 3
    Новый пользователь linux ленится читать man-страницу. Но если они используют Linux достаточно, они будут к нему привыкли :) Это супер полезно :)
  • 12
    Не всегда ленив, (но иногда), часто случается так, что у нового пользователя Linux возникают проблемы с пониманием справочной страницы. (Они могут показаться загадочными)
Показать ещё 1 комментарий
6

Или используйте awk вместо:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file
5

используйте grep -n -i null myfile.txt для вывода номера строки перед каждым соответствием.

Я не думаю, что grep имеет переключатель для печати подсчета совпадающих строк, но вы можете просто вывести grep-выход в wc, чтобы выполнить это:

grep -n -i null myfile.txt | wc -l
  • 3
    -c выведет общее количество совпадений
  • 0
    Вы правы. К сожалению, это также подавляет нормальную производительность.
3

grep найдите строки и выведите номера строк, но не позволяйте "программировать" другие вещи. Если вы хотите включить произвольный текст и выполнить другое "программирование", вы можете использовать awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Или используя оболочку (bash/ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"
2

или в perl (для полноты...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'
1

Ссылка на эту ссылку для linux command linux http://linuxcommand.org/man_pages/grep1.html

для отображения строки нет, строка кода и файла используют эту команду в вашем терминале или cmd, GitBash (с помощью терминала)

grep -irn "YourStringToBeSearch"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню