2010-09-09 31 views

Odpowiedz

37

To zależy. Jeśli używasz zwykłego grep, nie uciekniesz:

echo '(foo)'|grep '(fo*)' 

Rzeczywiście musisz uciec, jeśli chcesz użyć nawiasów jako grupowania.

Jeśli używasz extended regular expressions, ty uciec:

echo '(foo)'|grep -E '\(fo*\)' 
+1

Kiedy używam grep -rin init() * w katalogu narzeka błąd składniowy w pobliżu nieoczekiwanego tokena (.Jak to naprawić? –

+0

Przykro mi, nie rozumiem. Mam kilka plików javascript, z Funkcja init() wywoływana w kilku miejscach w nich.Chcę dowiedzieć się, gdzie wywoływane jest wszystkie init(), używając grep -rin init() * w katalogu .. To skarży się na nieprawidłową składnię w pobliżu (.Jak mam uciec ( –

+3

@Megha, aby wyjaśnić, że był to błąd powłoki, ponieważ nie zacytowałeś wyrażenia regularnego. –

4
$ echo "init()" | grep -Erin 'init\([^)]*\)' 
1:init() 

$ echo "init(test)" | grep -Erin 'init\([^)]*\)' 
1:init(test) 

$ echo "initwhat" | grep -Erin 'init\([^)]*\)' 
+0

To jest nieprawidłowe. Równie łatwo będzie dopasować "initwhatever", ponieważ domyślnie backslashed parens tworzy grupy przechwytujące. Jak już wspomniałem powyżej, nie można uciec parens zwykłym grep. –

+0

Wierzę, że to jest w porządku, ponieważ "-E" jest równoważne z egrep. – gkanwar

1

Przejdź do katalogu głównego (jeśli są świadomi, gdzie są pliki JavaScript). Następnie wykonaj następujące czynności.

grep 'init()' *.js 
+0

w celu rekursywnego przechodzenia do wszystkich podfolderów, sugeruje dodanie parametru -r – hejiaming007

18

Jeśli chcesz wyszukać dokładnie taki ciąg "init()", a następnie użyć fgrep "init()" lub grep -F "init()".

Obydwa z nich wykonają ustalone dopasowywanie ciągów, tj. Potraktują wzorzec jako zwykły ciąg do wyszukania, a nie jako wyrażenie regularne. Uważam, że jest to również szybsze niż wyszukiwanie regex.