1

Что я пытаюсь сделать:

Найдите регулярное выражение \b\$\w+ во всех файлах .php которые попадают в эту структуру каталогов:

foo/templates/*.php
bar/templates/*.php
<something>/templates/*.php

Изменить: я должен заявить, что моя цель более высокого уровня состоит в том, чтобы найти уникальные переменные PHP в файлах

Что я пробовал:

grep '\b\$\w+' **/templates/*.php
grep '\b\$\w+' */templates/*.php
grep '\b\$\w+' **/templates/**.php

Ни один из них, кажется, не дает ожидаемых результатов. Какой правильный синтаксис для этого?

Кроме того, было бы неплохо "сгруппировать по" или "выбрать отличительные" (например, $_GET будет отображаться только один раз, даже если в файле 180 экземпляров), если это возможно.


Я уже прочитал эти ответы, которые побудили меня попробовать приведенные выше команды:

1 ответ1

1

Пытаться:

grep -oE '\$\w+' */templates/*.php | sort -u

Заметки:

  • Опция -o grep печатать только совпадающие части строки, а не всю строку. Это должно дать вам имена всех переменных в стиле $ .

  • sort -u сортирует и удаляет дубликаты, поэтому каждое имя переменной должно появляться в выходных данных только один раз.

  • Используемая вами конструкция \w требует расширенного регулярного выражения. Поэтому опция -E была добавлена.

  • Использование \b для границ слова здесь проблематично, потому что $ не является допустимым символом "слова" и, следовательно, не начинает слово, как \b понимает его. Следовательно, \b будет соответствовать только в том случае, если слово закончится как раз перед $ как в a$b но не a $b . \b был удален из кода выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .