У меня есть файл, который, возможно, содержит неправильное форматирование (в данном случае наличие шаблона \\backslash
). Я хотел бы использовать grep
для возврата только номеров строк, в которых это происходит (например, совпадение было здесь, перейдите к строке № x и исправьте ее).
Однако, похоже, нет способа распечатать номер строки ( grep -n
), а не совпадение или саму строку.
Я могу использовать другое регулярное выражение для извлечения номеров строк, но я хочу убедиться, что grep не сможет этого сделать самостоятельно. grep -no
подходит ближе всего, я думаю, но все же отображает совпадение.
grep -no
:! Это сделало то, что я пришел сюда, чтобы попробовать и сделать! (то есть не печатать строку, которая иногда бывает очень длинной, например, в уменьшенных исходных файлах javascript.)Ответы:
пытаться:
источник
-f
параметр. Для меня это было-f2
. (Знайте, что это старый материал, но я думаю, что он может помочь некоторым бедным душам)grep -n "text to find" file.ext | cut -f1,2 -d:
показывает имя файла и номер строки.-H
чтобы заставить его показывать имя файла, когда есть только один файл. И наоборот, вы всегда можете использовать,-h
чтобы запретить вывод имени файла, независимо от того, сколько файлов вы используете.Если вы готовы использовать AWK:
В этом случае FNR - это номер строки. AWK - отличный инструмент, когда вы смотрите на grep | cut или когда хотите получить вывод grep и манипулировать им.
источник
NR
работает также, когда проверяется только один файл, как в этом случае.Все эти ответы требуют, чтобы grep сгенерировал все совпадающие строки, а затем перенаправил их в другую программу. Если ваши строки очень длинные, может быть более эффективным использовать только sed для вывода номеров строк:
источник
Версия Bash
источник
Я рекомендую ответы с указанием
sed
иawk
только для получения номера строки, а неgrep
для получения всей совпадающей строки с последующим удалением ее из вывода с помощьюcut
или другого инструмента. Для полноты вы также можете использовать Perl:или Рубин:
источник
Вам понадобится второе поле после двоеточия, а не первое.
grep -n "text to find" file.txt | cut -f2 -d:
источник
Чтобы подсчитать количество строк, соответствующих шаблону:
Чтобы извлечь совпавший шаблон
Для отображения номеров строк, в которых был найден образец
источник
используя только grep :
grep -n "text to find" file.ext | grep -Po '^[^:]+'
источник