Existe um comando no Mac OS X que pode executar a pesquisa de regex de várias linhas?

12

Quero fazer uma pesquisa regex simples recursivamente através de um diretório que não esteja restrito a linhas únicas.

Eu tentei grep e ack, mas nenhum deles parece apoiar isso.

Eu sei que não deve ser muito computacionalmente caro (no meu caso) porque meu editor de texto preferido ( Sublime Text ) pode fazê-lo perfeitamente.

Estou apenas procurando uma versão simples em linha de comando disso. O Google apareceu pcregrep , mas não consigo encontrar isso no Mac. Eu simplesmente não estou olhando no lugar certo?

Dan Tao
fonte
1
Dar um exemplo do que você está procurando seria útil. E grepcom o contexto o ajuda a encontrar o que deseja ( -C1)?
mbb 07/07

Respostas:

15

Instale o Homebrew e, em seguida:

brew install pcre

Isso lhe dará as últimas pcregrep

Tobia
fonte
1

Você não disse exatamente o que estava procurando, então imagino a tarefa de descobrir se o arquivo contém 112 seguido de 223, desconsiderando as novas linhas.

Uma awksolução um pouco artificial :

awk -vRS='' '/112.*223/ { print "found it"; exit }' file.in

A RSvariável contém o separador de registros. Ao configurá-lo para a sequência vazia, o arquivo inteiro será lido como um registro.

Isso provavelmente será muito ineficiente em arquivos grandes.

A propósito, eu estou fazendo isso no OpenBSD, mas o OS X awk deve funcionar da mesma maneira.

Kusalananda
fonte
Eu estou no OS X 10.11.2 e obter "awk: -v opção inválida"
HaggleLad
no OS X, você precisa de um espaço entre ve RS. ieawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil
0

"pcregrep" pode se referir a um estábulo mais antigo pcregrepe mais recente pcre2grep. Ambos são fornecidos pelo projeto PCRE empcre.org .

As portas Mac fornecem a primeira como parte da porta pcre(estável na versão 8.40) e a segunda como parte da porta pcre2(atualmente versão 10.22). Instalar via:

% sudo port install pcre2
Jim DeLaHunt
fonte