Получить номер строки при использовании grep

360

Я использую grep recursive для поиска файлов по строке, и все соответствующие файлы и строки, содержащие эту строку, печатаются на терминале. Но возможно ли получить номера строк этих строк тоже?

пример: в настоящее время я получаю /var/www/file.php: $options = "this.target" , но я пытаюсь получить /var/www/file.php: 1142 $options = "this.target";, ну, где 1142будет номер строки, содержащей эту строку.

Синтаксис, который я использую для grep рекурсивно sudo grep -r 'pattern' '/var/www/file.php'

Еще один вопрос заключается в том, как мы получаем результаты, не равные шаблону. Как и все файлы, но не те, которые имеют определенную строку?

сай
источник
Флаг -v покажет строки, которые не совпадают (grep -v myText MyFile.txt)
bcarroll

Ответы:

546
grep -n SEARCHTERM file1 file2 ...
Миро А.
источник
У меня был еще один быстрый вопрос, как мы получаем результаты, не равные шаблону. Как и все файлы, но не те, которые имеют определенную строку?
Сай
5
это будет ключ командной строки -v. Если вы запустите 'grep --help', он отобразит все опции
Miro A.
56
Вам не нужно, -rесли вы указываете несколько файлов. Вам нужно только -rесли вы указали каталоги.
Sparhawk
@JeanPaul - я вижу одинаковый результат для -nr и -n -r. Какую версию grep вы используете? $ grep -n -r name * | wc -l 1984 $ grep -nr name * | wc -l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.
Код только ответ, без объяснений. : S
Флориан Кастелайн
148

Номера строк печатаются с grep -n:

grep -n pattern file.txt

Чтобы получить только номер строки (без соответствующей строки), можно использовать cut:

grep -n pattern file.txt | cut -d : -f 1

Линии, не содержащие шаблон, печатаются с grep -v:

grep -v pattern file.txt
Карлито
источник
3
И последний соответствующий номер строки: grep -n pattern file.txt | cut -d : -f 1 | tail -1(вы можете сохранить это в переменной и использовать его, например, для хвостового файла из него)
Nux
И чтобы удалить число / двоеточие в начале каждой строки, вы можете использовать что-то вроде:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon
24

Если вы хотите только номер строки, сделайте это:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Пример:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023
Облачный водопад
источник
1
awk -F: '{print $1}'также работает и вам не нужно -rв grepпри использовании на файлы (только каталоги могут быть найдены рекурсивно)
Стюарт Cardall
7
grep -A20 -B20 pattern file.txt

Поиск шаблона и показать 20 строк после и до шаблона

Эмилио
источник
11
Это совсем не то, о чем просили.
Джонатон Рейнхарт
3
Кроме того, -C20это более короткая версия, если это то, что нужно
Марти Нил
0

grep -nr каталог "строка поиска"

Это дает вам строку с номером строки.

случайный парень
источник
0

Чтобы отобразить результаты с номерами строк, вы можете попробовать это

grep -nr "word to search for" /path/to/file/file 

Результат должен быть примерно таким:

linenumber: other data "word to search for" other data
Фуад Джеббар
источник