2012-06-01 3 views
4

Я хочу сделать grep в bash на папке в поисках термина foobar. Затем я хочу вывести все совпадения по w/filename и номер строки, где обнаружены вхождения. Это возможно?grep получить соответствие имени файла и номер строки в bash

Мне нужен выход, чтобы выглядеть следующим образом:

{{filename}}:{{line_number}} - {{matched_text}} 
+4

Читал справочная страница для 'Grep'? – chepner

+0

У меня есть, но, очевидно, я, должно быть, что-то пропустил ... заботиться о том, чтобы просветить меня? –

+0

Вам нужны опции -n и -r. – chepner

ответ

9
grep -nrH 'regex' /dir/ 

-H является вариант, который добавляет имена файлов, -n добавляет номера строк, -r рекурсивная

I получить имена файлов даже без -H, если только нет только одного файла.

Добавить -i для регистронезависимых

Добавить -E для расширенных регулярных выражений

1

Да; попробуйте: grep -nr "expression" /path/to/files/

+0

Это возвращает номер строки, а не имя файла, содержащегося в –

+0

Извините, пересмотрено. –

+0

Вы можете или не хотите использовать параметр -r в зависимости от того, хотите ли вы рекурсивно читать файлы в каждом подкаталоге. – mamills

3

Используйте -n или --line-номер опции

grep -n foobar 
+0

Это возвращает номер строки, а не имя файла, содержащегося в –

+0

Я использую grep (GNU grep) 2.5.1, и он показывает как номер файла, так и номер строки. – mamills

0

awk решение на основе:

awk '/REGEX/{print FILENAME":"FNR" - "$0}' PATH 

Для рекурсивного поиска пути,

find PATH-TO-START -type f -exec awk '/REGEX/{print FILENAME":"FNR" - "$0}' {} \; 
Смежные вопросы