Você pode usar grep
desta maneira:
grep -rzlP '(?s)(?=.*?string1)(?=.*?string2)(?=.*?string3)' .
-
(?s)
Conhecido "dot-all", que diz ao grep que permite que o ponto.
corresponda também a\n
caracteres do ewline. ' -
(?=.*?pattern)
: Lookahead positivo, que corresponde a todos os caracteres.
que ocorreram zero ou mais vezes*
e não-ganancioso seguido por um padrão (string1
,string2
, ...) .
Você pode fazer uma função como a seguir (POSIX bash
& zsh
):
mgrep() { eval grep -rzlP $(printf ''\''(?s)';
printf '(?=.*?'\''"$%d"'\'')' $(eval echo {1..$#}); printf ''\''') . ; }
depois, chame como abaixo e ele procurará os arquivos recursivamente dentro do diretório de trabalho atual com todos os padrões em
.mgrep string1 string2 string3
ele também irá lidar com todos os tipos de padrões, pois o grep
suporta ( ajusta a opção grep
na função de acordo com sua necessidade com antecedência ).
mgrep string 'pattern with space' '\d+' [0-9] [...]