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}' *