Eu quero encontrar todos os arquivos, que contém duas linhas: abc
e def
. Por exemplo,
xxx
111abc
yyy
222def333
Este arquivo deve ser capturado por grep
porque contém abc
e def
.
O que devo fazer? Já tentei grep -rE 'abc.*def' /dir/
mas não funciona.
Uma versão muito mais simplificada
grep
do--null-data
modo (-z
) seria usar um quantificador guloso para corresponder a qualquer número de novas linhas comoOu use pcregrep (fornecido pelo projeto PCRE ) que por padrão usa os recursos de regex PCRE. O
-M
habilita o modo de correspondência de várias linhas.Em sistemas GNU, isso funcionará para dois padrões se a ordem relativa de suas correspondências não importa:
Você pode encadear isso se tiver mais padrões do que dois:
ou use
find
:Isso não é muito eficiente e outra ferramenta que
grep
pode ser melhor para essa tarefa.Apenas para o caso de você ter condições ainda mais complexas, podemos usar o Awk
Onde:
RS="\0"
define um separador de registro não presente no arquivo (=arquivo slurp) econdition {print FILENAME}
gera arquivos que correspondem à condição