Вы можете использовать git grep для нескольких комбинаций с использованием булевых выражений, например:
git grep --all-match --no-index -e "fax" --and -e "phone" --and --not -e "address"
Вы можете комбинировать разные шаблоны с булевыми выражениями, такими как [ f6], --or и --not.
--all-match При предоставлении нескольких выражений шаблона этот флаг указан для ограничения соответствия файлам, у которых есть строки, соответствующие всем им. --no-index Поиск файлов в текущем каталоге, который не управляется Git. -l / --files-with-matches / --name-only Показывать только имена файлов. -e Следующий параметр - это шаблон. По умолчанию используется базовое регулярное выражение.Другие параметры для рассмотрения:
--all-match При предоставлении нескольких выражений шаблона этот флаг указан для ограничения соответствия файлам, у которых есть строки, соответствующие всем им.
-q / --quiet / --silent Не выводить согласованные строки; выйдите со статусом 0, когда есть совпадение.--threads Число используемых рабочих потоков grep.
Чтобы изменить тип паттерна, вы также можете использовать -G / --basic-regexp (по умолчанию), -F / --fixed-strings, -E / --extended-regexp, -P / --perl-regexp, -f file и др.
Проверить man git-grep для дальнейшего help
grep -L "address" $(grep -l "phone" $(grep -rl "fax" .))
Вот синтаксис grep, который использует цепочку подстановок команд:
Найти имена файлов, имеющие шаблон «fax» (grep -rl "fax" .). Фильтруйте найденные имена файлов, которые имеют шаблон «телефон» (grep -l "phone" $(cmd)). Отфильтруйте дальше, чтобы исключить файлы, не имеющие address (grep -L "address" $(cmd)).Объяснение:
Если вы работаете с большими данными, рассмотрите вместо этого замену команд . 27]
find . -type f -name '*.txt' \
-execdir bash -c 'grep -L "address" "$(grep -l "phone" "$(grep -l "fax" "{}")")"' ';' \
2>/dev/null
Вышеприведенный пример может плохо работать с файлами с пробелами, так что вот версия с find:
На самом деле, помимо команд в этом ответе, вам нужно
sudo apt install libapache2-mod-php
. Как-то он исчез!