Имена файлов и номера строк для совпадений cat и grep
Вопрос
Мой код
$ *.php | grep google
Как я могу распечатать имена файлов и номера строк рядом с каждым совпадением?
Решение
grep google *.php
если вы хотите охватить множество каталогов:
find . -name \*.php -print0 | xargs -0 grep -n -H google
(как объяснено в комментариях, -H полезен, если xargs обнаруживает только один оставшийся файл)
Другие советы
Тебе не следует делать
$ *.php | grep
Это означает: «запустите первую PHP-программу с именем остальных, заданным подстановочными знаками в качестве параметров, а затем запустите grep на выходе».
Должен быть:
$ grep -n -H "google" *.php
А -n
флаг сообщает ему, что нужно выполнять номера строк, а флаг -H
Флаг сообщает ему отображать имя файла, даже если есть только файл.По умолчанию Grep отображает имена файлов, если выполняется поиск по нескольким файлам, но вы, вероятно, захотите убедиться, что выходные данные согласованы независимо от количества совпадающих файлов.
grep -RH "google" *.php
Пожалуйста, взгляните на ack http://betterthangrep.com.Эквивалент того, что вы пытаетесь:
ack google --php
find ./*.php -exec grep -l 'google' {} \;
Используйте «man grep», чтобы увидеть другие функции.
for i in $(ls *.php); do grep -n --with-filename "google" $i; done;
find . -name "*.php" -print | xargs grep -n "searchstring"