Você pode usar git grep para vários padrões combinados usando expressões booleanas, por exemplo:
git grep --all-match --no-index -e "fax" --and -e "phone" --and --not -e "address"
Você pode combinar diferentes padrões com expressões Booleanas como --and , --or e --not .
--all-match When giving multiple pattern expressions, this flag is specified to limit the match to files that have lines to match all of them.
--no-index Search files in the current directory that is not managed by Git.
-l/--files-with-matches/--name-only Show only the names of files.
-e The next parameter is the pattern. Default is to use basic regexp.
Outros parâmetros a considerar:
--threads Number of grep worker threads to use.
-q/--quiet/--silent Do not output matched lines; exit with status 0 when there is a match.
Para alterar o tipo de padrão, você também pode usar -G / --basic-regexp (padrão), -F / --fixed-strings , -E / --extended-regexp , -P / --perl-regexp , -f file e outros.
Verifique man git-grep para ajuda adicional.
grep
Aqui está a sintaxe grep , que usa a cadeia de substituições de comandos :
grep -L "address" $(grep -l "phone" $(grep -rl "fax" .))
Explicação:
- Localize os nomes dos arquivos com o padrão "fax" (
grep -rl "fax" . ).
- Filtre os nomes dos arquivos que estão com o padrão "phone" (
grep -l "phone" $(cmd) ).
- Filtre mais abaixo para excluir arquivos que não tenham
address ( grep -L "address" $(cmd) ).
Se você estiver trabalhando com dados grandes, considere usar ripgrep .
find
O exemplo acima pode não funcionar bem com arquivos com espaços em branco, portanto, aqui está a versão com find :
find . -type f -name '*.txt' \
-execdir bash -c 'grep -L "address" "$(grep -l "phone" "$(grep -l "fax" "{}")")"' ';' \
2>/dev/null
Veja também: Verifique se existem várias strings ou expressões regulares em um arquivo