Chcę grep dla wywołania funkcji "init()" we wszystkich plikach JavaScript w katalogu. Jak to zrobić, używając grep?Jak uniknąć nawiasów w grep
W szczególności, w jaki sposób mogę uniknąć nawiasów, ()
?
Chcę grep dla wywołania funkcji "init()" we wszystkich plikach JavaScript w katalogu. Jak to zrobić, używając grep?Jak uniknąć nawiasów w grep
W szczególności, w jaki sposób mogę uniknąć nawiasów, ()
?
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*\)'
$ echo "init()" | grep -Erin 'init\([^)]*\)'
1:init()
$ echo "init(test)" | grep -Erin 'init\([^)]*\)'
1:init(test)
$ echo "initwhat" | grep -Erin 'init\([^)]*\)'
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. –
Wierzę, że to jest w porządku, ponieważ "-E" jest równoważne z egrep. – gkanwar
Przejdź do katalogu głównego (jeśli są świadomi, gdzie są pliki JavaScript). Następnie wykonaj następujące czynności.
grep 'init()' *.js
w celu rekursywnego przechodzenia do wszystkich podfolderów, sugeruje dodanie parametru -r – hejiaming007
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.
Kiedy używam grep -rin init() * w katalogu narzeka błąd składniowy w pobliżu nieoczekiwanego tokena (.Jak to naprawić? –
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 ( –
@Megha, aby wyjaśnić, że był to błąd powłoki, ponieważ nie zacytowałeś wyrażenia regularnego. –