Ich muss nach einer PHP-Variablen suchen $someVar
. Grep glaubt jedoch, dass ich versuche, eine Regex auszuführen, und beschwere mich:
$ 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">>
Ich sehe nicht , eine Option für das Erklären grep nicht die Zeichenfolge als regex zu interpretieren, aber die gehören $
einfach als eine weitere Zeichenkette.
grep
Interpretation$
als Regex. Es geht darum, dass die Shell$someVar
durch den Wert der Umgebungsvariablen ersetzt wirdsomeVar
, wahrscheinlich durch die leere Zeichenfolge. Das zweite Beispiel sollte nicht alle Zeilen mit,someVar
sondern alle Zeilen zurückgeben, da sich die leere Zeichenfolge in allen Zeilen befindet. Um die Shell anzuweisen, nicht zu ersetzen, müssen Sie'$someVar'
oder verwenden\$someVar
. Dann müssen Sie sich mit dergrep
Interpretation des$
Charakters befassen .Antworten:
Entkomme dem,
$
indem\
du ein davor stellst.quelle
Verwenden Sie
fgrep
(veraltet)grep -F
odergrep --fixed-strings
, um das Muster als Liste fester Zeichenfolgen anstelle eines regulären Ausdrucks zu behandeln.Als Referenz erwähnt die Dokumentation (Auszüge):
Die vollständige Referenz finden Sie unter: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
quelle
addslashes()
Sie in Bash keine PHPs ausführen. Dies ist der einfachste Weg, dies zu tun.$
, zum Beispiel:grep -FR "unset(\$foo['bar'])"
, sonst denkt , dass es es ist eine externe Variable und versucht sie zu erweiterngrep -F
ist eine Standardmethode, umgrep
Argumente als feste Zeichenfolge und nicht als Muster zu interpretieren.quelle
Sie müssen grep mit '-F' mitteilen, dass Sie anstelle eines Musters eine feste Zeichenfolge verwenden:
quelle
In dieser Frage geht es nicht um die
grep
Interpretation$
als Regex. Es geht darum, dass die Shell$someVar
durch den Wert der Umgebungsvariablen ersetzt wirdsomeVar
, wahrscheinlich durch die leere Zeichenfolge.Im ersten Beispiel ist es so, als würde man
grep
ohne Argument aufrufen , und deshalb erhalten Sie eineusage
Ausgabe. Das zweite Beispiel sollte nicht alle Zeilen zurückgeben, diesomeVar
nur alle Zeilen enthalten, da sich die leere Zeichenfolge in allen Zeilen befindet.Um die Shell anzuweisen, nicht zu ersetzen, müssen Sie
'$someVar'
oder verwenden\$someVar
. Dann müssen Sie sich mit der Grep-Interpretation des$
Charakters befassen , daher diegrep -F
Option, die in vielen anderen Antworten angegeben ist.Eine gültige Antwort wäre also:
quelle
+1 für die
-F
Option ist dies die akzeptierte Antwort. Außerdem hatte ich ein "seltsames" Verhalten bei der Suche nach dem-I..
Muster in meinen Dateien, da dies-I
als Option von angesehen wurdegrep
. Um solche Fehler zu vermeiden, können wir das Ende der Argumente des Befehls mit explizit angeben--
.Beispiel:
Hoffe das hilft jemandem.
quelle
--
verwendet wird, kann-HnrF
weggelassen werden?-F
vermieden, das Muster als regulären Ausdruck zu--
interpretieren , während es vermieden wird, darauf folgende Elemente als Optionen von grep zu interpretieren.