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