Existe-t-il une commande dans Mac OS X qui peut effectuer une recherche d'expression régulière multiligne?


12

Je veux faire une recherche regex simple récursivement à travers un répertoire qui n'est pas limité à des lignes simples.

J'ai essayé grep et ack, mais aucun ne semble le supporter.

Je sais que cela ne devrait pas être trop coûteux en calcul (dans mon cas) car mon éditeur de texte de choix ( Sublime Text ) peut le faire très bien.

Je cherche juste une version en ligne de commande simple de ceci. Google a rendu pcregrep , mais je n'arrive pas à trouver cela pour Mac. Suis-je tout simplement pas au bon endroit?


1
Donner un exemple de ce que vous recherchez serait utile. Et est-ce grepque le contexte vous aide à trouver ce que vous voulez ( -C1)?
mbb

Réponses:


15

Installez Homebrew puis:

brew install pcre

Cela vous donnera la dernière pcregrep


1

Vous n'avez pas dit exactement ce que vous recherchez, alors j'imagine la tâche pour savoir si le fichier contient 112 suivi de 223, sans tenir compte des nouvelles lignes.

Une awksolution légèrement artificielle :

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

La RSvariable contient le séparateur d'enregistrement. En le définissant sur la chaîne vide, le fichier entier sera lu comme un enregistrement.

Cela sera probablement très inefficace en mémoire sur les gros fichiers.

Soit dit en passant, je fais cela sur OpenBSD, mais le awk OS X devrait fonctionner de la même manière.


Je suis sur OS X 10.11.2 et je reçois "awk: option -v invalide"
HaggleLad

sous OS X, vous avez besoin d'un espace entre vet RS. soitawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil

0

"pcregrep" peut désigner une ancienne écurie pcregrepet une plus récente pcre2grep. Les deux sont fournis par le projet PCRE àpcre.org l' adresse .

Mac Ports fournit le premier comme partie du port pcre(stable à la version 8.40) et le second comme partie du port pcre2(actuellement la version 10.22). Installer via:

% sudo port install pcre2
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.