2

Я ищу эту struct messages_sdd_t и мне нужно найти много файлов * .c, чтобы найти ее. Тем не менее, я не вижу, чтобы найти совпадение, поскольку я хочу исключить все слова «struct» и «messages_sdd_t». Поскольку я хочу искать только в этом «struct messages_sdd_t», причина этого в том, что struct используется много раз, и я продолжаю получать страницы или результаты поиска.

Я делал это без успеха:

find . -type f -name '*.c' | xargs grep 'struct messages_sdd_t'

и это

find . -type f -name '*.c' | xargs egrep -w 'struct|messages_sdd_t'

Большое спасибо за любые предложения,

3 ответа3

5

Используйте ack:

ack "struct messages_sdd_t" * .c

По умолчанию он рекурсивный и намного быстрее, чем grep (по моим наблюдениям) при поиске в каталоге, содержащем тонны исходного кода.

Если вы не хотите использовать ack , grep тоже подойдет:

grep -r "struct messages_sdd_t" * .c

1
find . -type f -name '*.c' -exec grep 'struct\s\+messages_sdd_t' {} \;

Или, если вам важно только имя файла:

find . -type f -name '*.c' -exec grep -q 'struct\s\+messages_sdd_t' {} \; -print
1
grep -R --include='*.c' 'struct messages_sdd_t' .

Это будет выполнять рекурсивный поиск и использовать сам grep для выбора только .c файлов.

Попробуйте добавить -H чтобы всегда писать имя файла с соответствием строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .