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?


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.