Задача
Мне нужно провести рефакторинг большого проекта, который использует файлы .phtml
для записи HTML с использованием встроенного кода PHP. Вместо этого я хочу использовать шаблоны Усы . Я хочу найти любые .phtml
giles, которые не содержат строку new Mustache
, так как они все еще должны быть переписаны.
Решение
find . -iname '*.phtml' -exec grep -H -E -o -c 'new Mustache' {} \; | grep :0$ | sed 's/..$//'
Объяснение
Перед трубами:
* Найти 1026 *
find .
Поиск файлов рекурсивно, начиная с этого каталога
-iname '*.phtml'
Имя файла должно содержать .phtml
(i
делает его без учета регистра)
-exec 'grep -H -E -o -c 'new Mustache' {}'
Запустите команду grep
на каждом из соответствующих путей
Grep
-H
Всегда печатать заголовки имен файлов с выходными строками.
-E
Интерпретировать шаблон как расширенное регулярное выражение (т.е. force grep
вести себя как egrep).
-o
Печать только соответствующей части строк.
-c
В стандартный вывод записывается только количество выбранных строк.
Это даст мне список всех путей к файлам, оканчивающихся на .phtml
, с указанием количества раз, которое строка new Mustache
встречается в каждом из них.
$> find . -iname '*.phtml$' -exec 'grep -H -E -o -c 'new Mustache' {}'\;
./app/MyApp/Customer/View/Account/quickcodemanagestore.phtml:0
./app/MyApp/Customer/View/Account/studio.phtml:0
./app/MyApp/Customer/View/Account/orders.phtml:1
./app/MyApp/Customer/View/Account/banking.phtml:1
./app/MyApp/Customer/View/Account/applycomplete.phtml:1
./app/MyApp/Customer/View/Account/catalogue.phtml:1
./app/MyApp/Customer/View/Account/classadd.phtml:0
./app/MyApp/Customer/View/Account/orders-trade.phtml:0
Первый канал grep :0$
фильтрует этот список, чтобы включить только строки, заканчивающиеся на :0
:
$> find . -iname '*.phtml' -exec grep -H -E -o -c 'new Mustache' {} \; | grep :0$
./app/MyApp/Customer/View/Account/quickcodemanagestore.phtml:0
./app/MyApp/Customer/View/Account/studio.phtml:0
./app/MyApp/Customer/View/Account/classadd.phtml:0
./app/MyApp/Customer/View/Account/orders-trade.phtml:0
Второй канал sed 's/..$//'
удаляет последние два символа каждой строки, оставляя только пути к файлам.
$> find . -iname '*.phtml' -exec grep -H -E -o -c 'new Mustache' {} \; | grep :0$ | sed 's/..$//'
./app/MyApp/Customer/View/Account/quickcodemanagestore.phtml
./app/MyApp/Customer/View/Account/studio.phtml
./app/MyApp/Customer/View/Account/classadd.phtml
./app/MyApp/Customer/View/Account/orders-trade.phtml