2013-03-08 3 views
0

У меня есть большой набор файлов, которые я хочу, чтобы искать в

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 подается ко второму, а окончательные результаты группируются вместе.

+0

делает 'Grep -rhoP "(<= X?) [A-Za-Z0-9 _] * (= X?)" |. Grep -Р«(? <= Y). * (? = Y) "' работает для вас? – Kent

+0

@Kent No. Результаты второго grep, скорее всего, поступают из разных файлов, чем результаты первого grep. Второй grep действительно нужно снова искать все файлы. – parvus

+0

О, я вас неправильно понял. поэтому два greps не имеют ничего общего друг с другом, но вы хотите получить результат одним выстрелом. то это? «grep -rhoP» (? <= X) [a-zA-Z0-9 _] * (? = X) | (? <= Y) [a-zA-Z0-9 _] * (? = Y) ".' – Kent

ответ

0

Возможно, это хороший сэр

grep -rho 'XY[a-zA-Z0-9_]*YX' . | sed 's/[XY]//g' 
Смежные вопросы