Использовать grep для отображения только номеров строк

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

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

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

Ответ 1

попробуйте следующее:

grep -n "text to find" file.ext |cut -f1 -d:

Ответ 2

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

awk '/textstring/ {print FNR}' textfile

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

Ответ 3

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

sed -n '/pattern/=' filename

Ответ 4

Bash версия

    lineno=$(grep -n "pattern" filename)
    lineno=${lineno%%:*}

Ответ 5

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

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

Ответ 6

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

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

Чтобы извлечь сопоставленный шаблон

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

Чтобы отобразить номера строк, на которых был сопоставлен шаблон

grep -n "pattern" file.ext | cut -f1 -d:

Ответ 7

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

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

или Ruby:

ruby -ne 'puts $. if /pattern/' filename

Ответ 8

используя только grep:

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