Подтвердить что ты не робот

Греп не как регулярное выражение

Мне нужно найти переменную PHP $someVar. Однако Греп думает, что я пытаюсь запустить регулярное выражение и жалуюсь:

$ 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, чтобы не интерпретировать строку как регулярное выражение, а включить $ как только другой строковый символ.

4b9b3361

Ответ 1

Побегите $, положив перед ним \.

Ответ 2

Используйте fgrep (устаревший), grep -F или grep --fixed-strings, чтобы он рассматривал шаблон как список фиксированных строк вместо регулярного выражения.

Для справки в документации упоминаются (выдержки):

-F --fixed-strings Интерпретировать шаблон как список фиксированных строки (вместо регулярных выражений), разделенные символами новой строки, любые из которых должно быть сопоставлено. (-F указан POSIX.)

fgrep совпадает с grep -F. Прямое обращение как fgrep устарел, но предоставляется, чтобы позволить историческим приложениям, которые полагаются на них запустить немодифицированный.

Для полной справки проверьте: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html

Ответ 3

grep -F - это стандартный способ сказать grep интерпретировать аргумент как фиксированную строку, а не шаблон.

Ответ 4

Вы должны сказать grep, что вы используете фиксированную строку вместо шаблона, используя '-F':

grep -ir "Something Here" * | grep -F \$somevar

Ответ 5

В этом вопросе основной проблемой является не grep интерпретация $ как регулярное выражение. Это о оболочке, заменяющей $someVar значением переменной окружения someVar, вероятно, пустой строкой.

Итак, в первом примере это как вызов grep без каких-либо аргументов, и поэтому он дает вам вывод usage. Второй пример не должен возвращать все строки, содержащие someVar, а все строки, потому что пустая строка находится во всех строках.

Чтобы заставить оболочку не подставлять, вы должны использовать '$someVar' или \$someVar. Затем вам придется иметь дело с интерпретацией grep символа $, поэтому параметр grep -F указан во многих других ответах.

Итак, один правильный ответ:

grep -ir "Something Here" * | grep '$someVar'

Ответ 6

+1 для опции -F, это должен быть принятый ответ. Кроме того, у меня было "странное" поведение при поиске шаблона -I.. в моих файлах, поскольку -I рассматривался как опция grep; чтобы избежать таких ошибок, мы можем явно указать конец аргументов команды с помощью --.

Пример:

grep -HnrF -- <pattern> <files>

Надеюсь, что это поможет кому-то.