Я не думаю, что это выполнимо с grep
, но это возможно с AWK:
#! /usr/bin/awk -f
/FOO/ {
matched = 1
if (notfirst) print ""
notfirst = 1
}
/^$/ {
matched = 0
}
matched
С подсчетом совпадений:
#! /usr/bin/awk -f
/FOO/ {
matched = 1
if (matches) print ""
printf "Match %d\n", ++matches
}
/^$/ {
matched = 0
}
matched
В обоих случаях первые два блока определяют, следует ли копировать текущую запись на выход. Когда текущая запись соответствует «FOO», первый блок устанавливает matched
в 1,при необходимости выводит пустую запись (для отделения предстоящего вывода от предыдущего совпадения ); во втором варианте также увеличивает счетчик matches
и выводит заголовок. Когда текущая запись пуста, второй блок устанавливает matched
в 0. Условие одиночества matched
печатает текущую запись, если matched
равно 1.
Предположим, что пейджер, используемый man
,less
(по умолчанию ), да.
После нажатия / или ? , нажмите Ctrlk . Подсказка изменится на одну из
Keep-pos /
Keep-pos ?
Затем введите шаблон.
Изman less
:
/pattern
Certain characters are special as in the / command:
^K Highlight any text which matches the pattern on the current screen, but don't move to the first match (KEEP current position).
man
может использовать другие пейджеры, поэтому указанная выше информация отсутствует в man man
.