Czy w systemie Mac OS X jest polecenie, które może przeprowadzać wyszukiwanie wyrażeń regularnych w wielu wierszach?

12

Chcę przeprowadzić rekursywnie proste wyszukiwanie wyrażeń regularnych w katalogu, który nie jest ograniczony do pojedynczych wierszy.

Próbowałem grep i ack, ale wydaje się, że żadne z nich nie popiera tego.

Wiem, że nie powinno to być zbyt drogie obliczeniowo (w moim przypadku), ponieważ mój edytor tekstu ( Sublime Text ) może to zrobić dobrze.

Po prostu szukam prostej wersji tego wiersza polecenia. Google odkryło pcregrep , ale nie mogę tego znaleźć na Macu. Czy po prostu nie wyglądam we właściwym miejscu?

Dan Tao
źródło
1
Pomocne byłoby podanie przykładu tego, czego szukasz. Czy grepkontekst pomaga Ci znaleźć to, czego szukasz ( -C1)?
mbb

Odpowiedzi:

15

Zainstaluj Homebrew, a następnie:

brew install pcre

To da ci najnowsze pcregrep

Tobia
źródło
1

Nie powiedziałeś dokładnie, czego szukasz, więc wyobrażam sobie zadanie, aby dowiedzieć się, czy plik zawiera 112, a następnie 223, nie uwzględniając znaków nowej linii.

Nieco wymyślone awkrozwiązanie:

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

RSZmienna zawiera separator rekordu. Po ustawieniu go na pusty ciąg cały plik zostanie odczytany jako jeden rekord.

Prawdopodobnie będzie to bardzo niewydajne w przypadku dużych plików.

Nawiasem mówiąc, robię to na OpenBSD, ale awk dla OS X powinien działać w ten sam sposób.

Kusalananda
źródło
Korzystam z systemu OS X 10.11.2 i otrzymuję „awk: invalid -v option”
HaggleLad,
w OS X potrzebujesz odstępu między vi RS. tj.awk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil
0

„pcregrep” może odnosić się do starszej stabilnej pcregrepi nowszej pcre2grep. Oba są dostarczane przez projekt PCRE pod adresempcre.org .

Mac Ports zapewnia pierwszy jako część portu pcre(stabilny w wersji 8.40), a drugi jako część portu pcre2(obecnie wersja 10.22). Zainstaluj przez:

% sudo port install pcre2
Jim DeLaHunt
źródło