У меня есть большой набор файлов, которые я хочу, чтобы искать в
GREP несколько слов, используя результаты из предыдущего Grep
Я хочу, чтобы найти все слова -. И только слова - которые окружены X
, Я делаю это с просмотром назад и опережающим просмотром:
grep -rhoP "(?<=X)[a-zA-Z0-9_]*(?=X)" .
Теперь я хочу знать, если есть слова - с полным контекстом - от предыдущего результата, что окружены с Y
. Я могу сделать это для одного конкретного слова abc
grep -rP "(?<=Y)abc(?=Y)" .
Но как я могу трубные две команды вместе?
Update
У меня есть большой набор C-файлов. Все наши функции api сначала объявляются в одном из наших .h файлов и используются в одном из наших .c файлов и вложенных файлов .h.
Некоторые функции могут быть недоступны напрямую, но с помощью указателя функции, но это является большим препятствием для развития. Для этой цели мы сделали несколько макросов (FP
и CALL
), чтобы иметь возможность легко включать и отключать это требование.
FP(DoThis)
void DoThis(void);
- С требованием НА,
FP
определяет указатель на функцию - в этом случае дляDoThis
- которые могут быть использованы в дальнейшем при использованииCALL(DoThis)();
. - С требованием ВЫКЛ,
FP
не имеет ничего общего, аCALL(DoThis)
расширен только доDoThis
.
списка всех функций, для которых указатель функции создаются таким образом, может быть выбран с помощью:
grep -rhoP "(?<=FP\()[a-zA-Z0-9_]*(?=\))" .
Списка всех мест, где указатель функции для функции DoThis используется, может быть выбран с помощью :
grep -rP "(?<=CALL\()DoThis(?=\))" .
Теперь я хочу, чтобы получить список всех мест, где указатель функции для любой функции, созданной с помощью FP
и CALL
может быть извлечен. Итак, так или иначе, я хочу объединить две grep вместе, так что каждый результат первого grep подается ко второму, а окончательные результаты группируются вместе.
делает 'Grep -rhoP "(<= X?) [A-Za-Z0-9 _] * (= X?)" |. Grep -Р«(? <= Y). * (? = Y) "' работает для вас? – Kent
@Kent No. Результаты второго grep, скорее всего, поступают из разных файлов, чем результаты первого grep. Второй grep действительно нужно снова искать все файлы. – parvus
О, я вас неправильно понял. поэтому два greps не имеют ничего общего друг с другом, но вы хотите получить результат одним выстрелом. то это? «grep -rhoP» (? <= X) [a-zA-Z0-9 _] * (? = X) | (? <= Y) [a-zA-Z0-9 _] * (? = Y) ".' – Kent