Як я можу відформатувати свій греп-вихід, щоб відображати номери рядків в кінці рядка, а також кількість звернень?


378

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

Що я можу зробити?

Відповіді:


600

-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

чи можу я це відформатувати, додавши номери рядків після замість того, як раніше:
Лондон

ваше рішення здається чудовим, але отримайте помилкуawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
Лондон,

Вибачте, що перейшов на Linux зараз працює :) Це була версія Windows не настільки добре
Лондон,

1
... лицарі, які говорять, -niяк ви пам’ятаєте цей трюк
Сантьяго Арісті

59

Використовуйте -nабо --line-number.

Ознайомтеся з man grepнабагато більше варіантів.


3
новий користувач Linux лінивий читати сторінку man. Але якщо вони будуть використовувати Linux достатньо, вони будуть використані до нього :) Це дуже корисно :)
Dzung Nguyen

19
Не завжди ледачий, (Але іноді), часто трапляється, що у нового користувача Linux є проблеми з розумінням сторінки людини. (Вони можуть здатися загадковими)
TecBrat

інколи сторінка man може зайняти багато сторінок. І це їх важко прочитати
Євген Конков

7

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

Я не думаю, що у grep є перемикач для друку підрахунку загальної кількості відповідних рядків, але ви можете просто передати висновок grep в wc, щоб досягти цього:

grep -n -i null myfile.txt | wc -l

3
-c надрукує загальну відповідність рядків
dpatchery

Ти правий. На жаль, це також пригнічує нормальний вихід.
jhenninger

7

Або використовувати awkзамість цього:

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

4

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"

3

або на перл (для повноти ...):

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

2

Перейдіть за цим посиланням на команду linux http://linuxcommand.org/man_pages/grep1.html

для відображення рядка №, рядка коду та файлу використовуйте цю команду у своєму терміналі або cmd, GitBash (працює на терміналі)

grep -irn "YourStringToBeSearch"

1

Просто подумав, що я щось можу допомогти тобі в майбутньому. Для пошуку кількох рядків та номерів рядків виводу та перегляду результатів виберіть:

egrep -ne 'null|three'

покаже:

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

egrep -ne 'null|three' | less

відобразить вихід за менший сеанс

HTH черв

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.