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?


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


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.