Это можно сделать довольно легко с помощью конвейера оболочки и xargs.Идея состоит в том, чтобы использовать первое регулярное выражение в качестве фильтра для поиска файлов, а второе регулярное выражение для отображения мест, где встречается re.sub
.
Вот три файла Python для тестирования.
import-without-sub.py
имеет import re
, но не re.sub
:
import re
for i in range(10):
re.match(something)
print(i)
import-with-sub.py
имеет как import re
, так и re.sub
:
import re
for i in range(10):
re.match(something)
print(i)
re.sub(something)
И, наконец, no-import.py
не имеет import re
, но имеет re.sub
:
for i in range(10):
re.match(something)
print(i)
re.sub(something)
А теперь вот команда, чтобы показать только совпадения re.sub
в файлах, которые содержат import re
:
rg '^import\s+re$' --files-with-matches --null | xargs -0 rg -F 're.sub('
--files-with-matches
и --null
распечатать все подходящие пути к файлам, разделенные байтом NUL
.xargs -0
затем считывает эти пути к файлам и превращает их в аргументы, которые будут переданы rg -F 're.sub('
.(Мы используем --null
и -0
для правильной обработки имен файлов, содержащих пробелы.)
Его выходные данные в каталоге со всеми тремя из указанных выше файлов:
import-with-sub.py
7:re.sub(something)