Получить номер строки при использовании 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



0

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

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

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

linenumber: other data "word to search for" other data
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.