Используйте grep, чтобы сообщать только номера строк - PullRequest
89 голосов
/ 05 августа 2011

У меня есть файл, который, возможно, содержит неправильное форматирование (в данном случае, вхождение шаблона \\backslash). Я хотел бы использовать grep, чтобы возвращать только номера строк, где это происходит (например, совпадение было здесь, перейдите к строке # x и исправьте ее).

Однако, похоже, нет способа напечатать номер строки (grep -n), а не совпадение или саму строку.

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

Ответы [ 8 ]

134 голосов
/ 05 августа 2011

попробовать:

grep -n "text to find" file.ext | cut -f1 -d:
39 голосов
/ 07 августа 2011

Если вы открыты для использования AWK:

awk '/textstring/ {print FNR}' textfile

В этом случае FNR - номер строки. AWK - отличный инструмент, когда вы смотрите на grep | cut или когда вы хотите получить вывод grep и управлять им.

24 голосов
/ 18 сентября 2013

Все эти ответы требуют, чтобы grep сгенерировал все совпадающие строки, а затем передал их в другую программу. Если ваши строки очень длинные, может быть более эффективно использовать просто sed для вывода номеров строк:

sed -n '/pattern/=' filename
2 голосов
/ 06 декабря 2013

Bash версия

    lineno=$(grep -n "pattern" filename)
    lineno=${lineno%%:*}
1 голос
/ 23 апреля 2013

Вам понадобится второе поле после двоеточия, а не первое.

grep -n "text to find" file.txt | cut -f2 -d:

0 голосов
/ 23 декабря 2017

только с использованием grep :

grep -n "text to find" file.ext | grep -Po '^[^:]+'

0 голосов
/ 10 сентября 2017

Я рекомендую ответы с sed и awk, чтобы просто получить номер строки, а не с помощью grep, чтобы получить всю совпадающую строку, а затем удалить ее из вывода с помощью cut или другого инструмента.Для полноты вы также можете использовать Perl:

perl -nE '/pattern/ && say $.' filename

или Ruby:

ruby -ne 'puts $. if /pattern/' filename
0 голосов
/ 28 июня 2014

Для подсчета количества строк, соответствующих шаблону:

grep -n "Pattern" in_file.ext | wc -l 

Для извлечения совмещенного рисунка

sed -n '/pattern/p' file.est

Для отображения номеров строк, по которым был сопоставлен шаблон

grep -n "pattern" file.ext | cut -f1 -d:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...