Помощь с командами «найти» и «grep» - PullRequest
0 голосов
/ 11 февраля 2012

Мне нужна помощь с однострочником, который я могу запустить из терминала Mac OS X.Я использую MAMP для веб-разработки на моем Mac.У меня есть много проектов CakePHP в моей директории "/ Applications / MAMP / htdocs".Для простоты, давайте просто скажем, что у меня было два проекта CakePHP и что это был вывод команды find /Applications/MAMP/htdocs -type d -iname Controller*:

/Applications/MAMP/htdocs/my_cake1.3_project/app/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/app/tests/cases/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/console/templates/skel/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/console/templates/skel/tests/cases/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/libs/controller
/Applications/MAMP/htdocs/my_cake1.3_project/cake/tests/cases/libs/controller
/Applications/MAMP/htdocs/my_cake1.3_project/cake/tests/test_app/controllers
/Applications/MAMP/htdocs/my_cake1.3_project/cake/tests/test_app/plugins/test_plugin/controllers
/Applications/MAMP/htdocs/my_cake2_project/app/Controller
/Applications/MAMP/htdocs/my_cake2_project/app/Test/Case/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Console/Templates/skel/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Console/Templates/skel/Test/Case/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Test/Case/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Test/test_app/Controller
/Applications/MAMP/htdocs/my_cake2_project/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller

Теперь, иногда я хочу найти фрагмент кода, который язнаю, что я использовал в одном из контроллеров моих проектов CakePHP, но я не могу вспомнить, какой это был проект, поэтому я хочу найти их все.Однако я не хочу тратить время на поиск в папке "app / tests / case / controllers" или в папке "cake /".Команда find /Applications/MAMP/htdocs -type d -iname Controller* | grep -i /app/Controller дает мне список папок, в которых я хочу искать:

/Applications/MAMP/htdocs/my_cake1.3_project/app/controllers
/Applications/MAMP/htdocs/my_cake2_project/app/Controller

Мне просто нужно найти способ получить этот вывод, добавить косую черту и звездочку (/ *) в конецкаждой строки и передайте каждую строку команде grep -il "string to search for".Любая помощь будет оценена.Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

раствор 1

может быть, вы хотите проверить две опции команды поиска: (i)path и regex с их помощью вы можете сузить результаты поиска и передать найденные файлы в grep -il "searchString", например, |xargs. это выглядит так:

    find /Applications/MAMP/htdocs -type f -ipath "*/app/Controller/*.php" 
| xargs grep -il 'foo'  

с -regex будет более гибким.

решение 2

однако, если вы действительно хотите:

найдите способ получить этот вывод, добавьте косую черту и звездочку (/ *) к конец каждой строки и передайте каждую строку в строку grep -il "для поиска для "команды.

(кстати, здесь "труба" не будет работать.)

Вы могли бы сделать это:

find .(your original find).. |grep -i "/app/Controller" 
 |sed -r 's#^(.*)$#grep -il "foo" \1/*#g'|sh  

Трюк был сделан sed....|sh. строка sed выберет результат вашего предыдущего grep, добавит команду grep и опции: (grep -il "foo") и добавит «/*» для создания полной команды grep. наконец труба к ш, чтобы его выполнить.

0 голосов
/ 11 февраля 2012

Вы пробовали это?

find /Applications/MAMP/htdocs -type d -iname Controller* 
-exec grep -il "string to search for" {} /;
...