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

Я использую 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 впереди, и я не знаю, как добавить номера строк.

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

Ответы [ 8 ]

549 голосов
/ 19 октября 2010

-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
52 голосов
/ 19 октября 2010

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

Проверьте man grep для намного больше вариантов.

6 голосов
/ 19 октября 2010

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

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file
5 голосов
/ 19 октября 2010

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

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

grep -n -i null myfile.txt | wc -l
3 голосов
/ 19 октября 2010

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 голосов
/ 19 октября 2010

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

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'
1 голос
/ 06 марта 2017

См. Эту ссылку для команды linux. Linux http://linuxcommand.org/man_pages/grep1.html

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

grep -irn "YourStringToBeSearch"
0 голосов
/ 01 ноября 2018

Просто подумал, что смогу помочь тебе в будущем. Чтобы найти несколько строк и номеров выходных строк и просмотреть выходные данные, введите:

egrep -ne 'null|three'

покажет:

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

egrep -ne 'null|three' | less

отобразит вывод в меньшем сеансе

НТН Июнь

...