ripgreb: показать результат поиска между двумя совпадениями

Я новичок в ripgreb, но очень впечатлен им.

У меня есть особый случай срабатывания триггера, и мне было интересно, можно ли это сделать

Скажем, у меня есть два файла уценки

...
## 5.9 Subheading

plz, plz, plz do NOT find me!

# 6 Heading

## 6.1 subheading

plz, plz, plz FIND me!

## 6.2 subheading

plz, plz, plz do NOT find me!
...

а также

...

## 6.1 subheading

plz, plz, plz FIND me too!

## 6.2 subheading

plz, plz, plz do NOT find me too!
...

Можно ли искать внутри ## 6.1 а также ## 6.2 для строк с более чем одной запятой в строке?

Итак, он отображал что-то вроде этого

$rg <magic-search term>

221 plz, plz, plz FIND me!

256 plz, plz, plz FIND me too!


Сейчас я просто делаю это, чтобы увидеть это

rg '## 6.1' --before-context 0 --after-context 4

но при этом не выполняется поиск нескольких запятых после '## 6.1' и не ограничивается поиск после


ОБНОВИТЬ

Я нашел "решение" для ripgrep и просто бросил его сюда:

$rg '## 6.1.*## 6.2' --multiline --multiline-dotall 

220 ## 6.1 subheading
221 plz, plz, plz FIND me!
222 ## 6.2 subheading

255 ## 6.1 subheading
256 plz, plz, plz FIND me too!
257 ## 6.2 subheading

В настоящее время он также распечатывает заголовки (## 6.1 а также ## 6.2)

Пытаясь избежать этого, делая что-то вроде этого, но это сначала просто удаляет это # а не всю строку

$rg '(?:(?!## 6.1).)*## 6.2' --multiline --multiline-dotall --pcre2

220 # 6.1 subheading
221 plz, plz, plz FIND me!
222 ## 6.2 subheading

255 # 6.1 subheading
256 plz, plz, plz FIND me too!
257 ## 6.2 subheading

Спасибо chriserin

1 ответ

Решение

Преобразование моего комментария в ответ, чтобы будущим посетителям было легко найти решение.

Вы можете использовать это awk:

awk -F, '/^## 6\.1 /{p=1; next} /^## 6\.2 /{p=0} p && NF > 1' file

Флаг p будет установлен на 1 когда мы встречаемся ## 6.1 и будет сброшен, когда мы встретим ## 6.2.

Для использования с подстановочными знаками, которые также печатают имена файлов:

awk -F, '/^## 6\.1 /{p=1; next} /^## 6\.2 /{p=0}
  p && NF > 1{print FILENAME ":", $0}' *
Другие вопросы по тегам