Find 协助;查找“;及;grep“;命令
我正在寻找一个可以从MacOSX终端运行的单行程序的帮助。我在Mac上使用MAMP进行web开发。我的“/Applications/MAMP/htdocs”目录中有很多CakePHP项目。为了简单起见,假设我有两个CakePHP项目,这是Find 协助;查找“;及;grep“;命令,find,grep,Find,Grep,我正在寻找一个可以从MacOSX终端运行的单行程序的帮助。我在Mac上使用MAMP进行web开发。我的“/Applications/MAMP/htdocs”目录中有很多CakePHP项目。为了简单起见,假设我有两个CakePHP项目,这是find/Applications/MAMP/htdocs-type d-iname Controller*命令的输出: /Applications/MAMP/htdocs/my_cake1.3_project/app/controllers /Applicat
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/cases/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”
命令。任何帮助都将不胜感激。谢谢 你试过这个吗
find /Applications/MAMP/htdocs -type d -iname Controller*
-exec grep -il "string to search for" {} /;
解决方案1 也许您想检查find命令的两个选项:
(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命令。最后通过管道连接到sh来执行它。问题是我不想浪费时间在“app/tests/cases/controllers”文件夹或“cake/”中的任何文件夹中搜索。不过,谢谢!我有两种解决方案!非常感谢你!为了使第一个解决方案能够满足我的特定需求,我必须将“*/app/Controller/*.php”
替换为“*/app/Controller*”
(CakePHP<2.0是“controllers”,CakePHP>=2.0是没有“s”的“Controller”)。为了使第二个解决方案能够满足我的特定需求,我必须将sed-r
替换为sed-E
。再次感谢!