ripgreb: показать результат поиска между двумя совпадениями - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в 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 Ответ

2 голосов
/ 14 июля 2020

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

Вы можете использовать это 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}' *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...