Muszę wyszukać zmienną PHP $someVar
. Jednak Grep myśli, że próbuję uruchomić wyrażenie regularne i narzeka:
$ grep -ir "Something Here" * | grep $someVar
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
$ grep -ir "Something Here" * | grep "$someVar"
<<Here it returns all rows with "someVar", not only those with "$someVar">>
Nie widzę opcji mówienia grepowi, aby nie interpretował ciągu jako wyrażenia regularnego, ale aby zawierał $
tylko inny znak ciągu.
grep
interpretacja$
jako wyrażenia regularnego. Chodzi o podstawienie przez powłokę$someVar
wartości zmiennej środowiskowejsomeVar
, prawdopodobnie pustego ciągu. Drugi przykład nie powinien zwracać wszystkich wierszy,someVar
ale wszystkie wiersze, ponieważ pusty ciąg znajduje się we wszystkich wierszach. Aby powiedzieć powłoce, aby nie zastępowała, musisz użyć'$someVar'
lub\$someVar
. Wtedy będziesz musiał zająć sięgrep
interpretacją$
postaci.Odpowiedzi:
Ucieknij przed
$
, umieszczając\
przed nim.źródło
Użyj
fgrep
(przestarzałe)grep -F
lubgrep --fixed-strings
, aby traktować wzorzec jako listę ustalonych ciągów zamiast wyrażenia regularnego.W celach informacyjnych dokumentacja wspomina (fragmenty):
Pełne informacje można znaleźć na stronie : https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
źródło
addslashes()
w bashu. To najprostszy sposób na zrobienie tego.$
, npgrep -FR "unset(\$foo['bar'])"
grep -F
jest standardowym sposobemgrep
interpretowania argumentu jako ustalonego łańcucha, a nie wzorca.źródło
Musisz powiedzieć grepowi, że używasz stałego ciągu zamiast wzorca, używając '-F':
źródło
W tym pytaniu głównym problemem nie jest
grep
interpretacja$
jako wyrażenia regularnego. Chodzi o podstawienie powłoki$someVar
przez wartość zmiennej środowiskowejsomeVar
, prawdopodobnie pustego ciągu.Więc w pierwszym przykładzie jest to jak wywołanie
grep
bez żadnego argumentu i dlatego dajeusage
wynik. Drugi przykład nie powinien zwracać wszystkich wierszy zawierającychsomeVar
oprócz wszystkich wierszy, ponieważ pusty ciąg znajduje się we wszystkich wierszach.Aby powiedzieć powłoce, aby nie zastępowała, musisz użyć
'$someVar'
lub\$someVar
. Wtedy będziesz musiał poradzić sobie z interpretacją grepa$
postaci, stądgrep -F
opcja podana w wielu innych odpowiedziach.Tak więc jedną prawidłową odpowiedzią byłoby:
źródło
+1 dla
-F
opcji, będzie to zaakceptowana odpowiedź. Ponadto miałem „dziwne” zachowanie podczas wyszukiwania-I..
wzorca w moich plikach, ponieważ-I
uznano, że opcjagrep
; aby uniknąć tego rodzaju błędów, możemy jawnie określić koniec argumentów polecenia za pomocą--
.Przykład:
Mam nadzieję, że to komuś pomoże.
źródło
--
jest używany, czy można-HnrF
go pominąć?-F
unika interpretowania wzorca jako wyrażenia regularnego, podczas gdy--
unika interpretowania następujących po nim elementów jako opcji grep.