Мне нужно найти переменную PHP $someVar
. Однако Grep думает, что я пытаюсь запустить регулярное выражение, и жалуется:
$ 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">>
Я не вижу возможности указать grep не интерпретировать строку как регулярное выражение, а включить $
как просто еще один строковый символ.
grep
интерпретации$
как регулярного выражения. Речь идет о замене оболочки$someVar
значением переменной средыsomeVar
, вероятно, пустой строкой. Второй пример должен возвращать не все строки,someVar
а все строки, потому что пустая строка находится во всех строках. Чтобы оболочка не заменяла замену, вы должны использовать'$someVar'
или\$someVar
. Тогда вам придется занятьсяgrep
интерпретацией$
персонажа.Ответы:
Чтобы избежать
$
, поставьте\
перед ним.источник
Используйте
fgrep
(не рекомендуется)grep -F
илиgrep --fixed-strings
, чтобы он обрабатывал шаблон как список фиксированных строк вместо регулярного выражения.Для справки в документации упоминаются (выдержки):
Для полной справки проверьте: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
источник
addslashes()
в bash. Это самый простой способ сделать это.$
, например:, вgrep -FR "unset(\$foo['bar'])"
противном случае он думает, что это внешняя переменная, и пытается ее расширитьgrep -F
- это стандартный способgrep
интерпретировать аргумент как фиксированную строку, а не шаблон.источник
Вы должны указать grep, что вы используете фиксированную строку вместо шаблона, используя '-F':
источник
В этом вопросе основная проблема заключается не в
grep
интерпретации$
как регулярного выражения. Речь идет о замене оболочки$someVar
значением переменной средыsomeVar
, вероятно, пустой строкой.Итак, в первом примере это похоже на вызов
grep
без аргументов, и поэтому он дает вамusage
результат. Второй пример должен возвращать не все строки, содержащие,someVar
а все строки, потому что пустая строка находится во всех строках.Чтобы оболочка не заменяла замену, вы должны использовать
'$someVar'
или\$someVar
. Затем вам придется иметь дело с интерпретацией$
символа grep , поэтомуgrep -F
вариант, указанный во многих других ответах.Итак, один верный ответ:
источник
+1 за
-F
вариант, это будет принятый ответ. Кроме того, у меня было «странное» поведение при поиске-I..
шаблона в моих файлах, так как-I
он рассматривался как вариантgrep
; чтобы избежать подобных ошибок, мы можем явно указать конец аргументов команды, используя--
.Пример:
Надеюсь, это кому-то поможет.
источник
--
используется, можно-HnrF
не указывать?-F
избегает интерпретации шаблона как регулярного выражения, в то время как--
избегает интерпретации элементов, следующих за ним, как параметров grep.