linux — Grep $ _SESSION [‘id’] только в файлах php

Попытка grep $_SESSION['id'] только в файлах PHP

grep -r --include="*.php" "SESSION\['id'\]" /var/www/ > grep.txt

Но я получил что-то ужасное в grep.txt и не только совпадения.

Как правильно написать синтаксис?

1

Решение

Проблема в том, что $_ интерпретируется в двойных кавычках: grep "$var" ищет содержание $var, в то время как grep '$var' ищет буквальную строку $var,

Поэтому вам нужно использовать одинарные кавычки, чтобы избежать этого. Поскольку ваш шаблон уже содержит одинарные кавычки, мы должны закрыть и снова открыть:

'$_SESSION['"'"'id'"'"']'

Все вместе:

grep -r --include="*.php" '$_SESSION['"'"'id'"'"']' /var/www/ > grep.txt

Гадкий, я знаю.

1

Другие решения

Хотел бы я найти парня, который дал GNU grep опции для поиска файлов, чтобы спросить, почему и кто сказал ему, что это разумно!

Во всяком случае … инструмент UNIX для поиска файлов назван find:

find /var/www -name '*.php' | xargs grep -F "\$_SESSION['id']"
2

Я использую инструмент командной строки под названиемподтверждени Grep». По умолчанию он ищет только «исходный код», но вы также можете сузить круг до конкретных расширений файлов (например, --php который соответствует «.php .phpt .php3 .php4 .php5 .phtml» и #! строка с ‘php’ в нем).

Вы также можете настроить его на игнорирование определенных каталогов по умолчанию — я установил локальную конфигурацию, чтобы не заходить в каталог vendor /.

ack --php "\$_SESSION['id']"

$ все еще должен быть \ цитирован — хотя это из-за внешних двойных кавычек.

1
По вопросам рекламы [email protected]