Заставить человека выделять совпадения, не переходя к ним

Я не думаю, что это выполнимо с 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.

0
06.07.2020, 02:08
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.

1
18.03.2021, 23:21

Теги

Похожие вопросы