Ответ 1
попробуйте следующее:
grep -n "text to find" file.ext |cut -f1 -d:
У меня есть файл, который, возможно, содержит неправильное форматирование (в данном случае появление шаблона \\backslash
). Я хотел бы использовать grep
, чтобы возвращать только номера строк, где это происходит (как в, совпадение было здесь, перейти к строке # x и исправить его).
Однако, похоже, не существует способа напечатать номер строки (grep -n
), а не совпадение или строку.
Я могу использовать другое регулярное выражение для извлечения номеров строк, но хочу, чтобы grep не смог сделать это сам. grep -no
подходит ближе, я думаю, но все равно отображает совпадение.
попробуйте следующее:
grep -n "text to find" file.ext |cut -f1 -d:
Если вы открыты для использования AWK:
awk '/textstring/ {print FNR}' textfile
В этом случае FNR - номер строки. AWK - отличный инструмент, когда вы смотрите на grep | cut, или в любое время, когда вы хотите использовать grep-выход и манипулировать им.
Все эти ответы требуют, чтобы grep генерировал все совпадающие строки, а затем транслировал их в другую программу. Если ваши строки очень длинны, может быть более эффективным использовать только sed для вывода номеров строк:
sed -n '/pattern/=' filename
Bash версия
lineno=$(grep -n "pattern" filename)
lineno=${lineno%%:*}
Вам понадобится второе поле после двоеточия, а не первое.
grep -n "text to find" file.txt | cut -f2 -d:
Чтобы подсчитать количество строк, соответствующих шаблону:
grep -n "Pattern" in_file.ext | wc -l
Чтобы извлечь сопоставленный шаблон
sed -n '/pattern/p' file.est
Чтобы отобразить номера строк, на которых был сопоставлен шаблон
grep -n "pattern" file.ext | cut -f1 -d:
Я рекомендую ответы sed
и awk
только для получения номера строки, вместо того, чтобы использовать grep
, чтобы получить всю совпадающую строку, а затем удалить это из вывода с помощью cut
или другого инструмента. Для полноты вы также можете использовать Perl:
perl -nE '/pattern/ && say $.' filename
или Ruby:
ruby -ne 'puts $. if /pattern/' filename
используя только grep:
grep -n "text to find" file.ext | grep -Po '^[^:]+'