这是我用来在php文件中查找匹配(queryString)的命令,在当前目录中,使用grep,不区分大小写,并在行中显示匹配的结果:
find . -iname "*php" -exec grep -iH queryString {} \;
有没有办法将匹配的文件名管道到另一个脚本?
我可能会运行-exec命令两次,但这似乎效率低下.
我想在Mac OS X上做的事实上就是在发现者中"揭示"该文件.我想我可以处理那个部分.如果我不得不放弃内联匹配并让grep显示文件名,然后将其传递给第三个脚本,那也没关系 - 我会解决的.
但我实际上甚至不确定如何将输出(匹配的文件名)传递给其他地方......
救命!:)
我想在finder窗口中显示每个文件 - 所以我可能不会使用-q标志并停在第一个.
我将在控制台中运行它,理想情况下我希望看到那里打印的内联匹配,以及能够将它们传递给另一个脚本,如oascript(applescript,在finder中显示它们).这就是我一直在使用的原因-H- 因为我喜欢看到文件名和匹配.
如果我不得不满足于使用,-l以便文件名可以更容易地通过管道传输到另一个脚本,那也没关系.但我认为,看从@Charlie马丁下面的答复后,该xargs的可能有帮助这里在同一时间,单一的发现,和单grep命令这样做既.
我确实说过bash,但我真的不介意是否需/bin/sh要这样做 - 我不太了解差异,但我知道有一些重要的.
谢谢大家的回复,我将在命令行尝试其中的一些,看看我是否能让他们中的任何一个工作,然后我想我可以选择最好的答案.如果您希望我澄清任何其他内容,请发表评论.
再次感谢!
Cha*_*tin 25
你打赌.通常的事情是这样的
$ find /path -name pattern -print | xargs command
Run Code Online (Sandbox Code Playgroud)
所以你可能会这样做
$ find . -name '*.[ch]' -print | xargs grep -H 'main'
Run Code Online (Sandbox Code Playgroud)
(测验:为什么-H?)
你可以继续这样做; 例如.你可能会用
$ find . -name '*.[ch]' -print | xargs grep -H 'main' | cut -d ':' -f 1
Run Code Online (Sandbox Code Playgroud)
获取包含'main'的文件的文件名向量,或
$ find . -name '*.[ch]' -print | xargs grep -H 'main' | cut -d ':' -f 1 |
xargs growlnotify -
Run Code Online (Sandbox Code Playgroud)
让每个名字成为Growl通知.
你也可以这样做
$ grep pattern `find /path -name pattern`
Run Code Online (Sandbox Code Playgroud)
要么
$ grep pattern $(find /path -name pattern)
Run Code Online (Sandbox Code Playgroud)
(在bash(1)中至少这些是等效的)但是你可以通过这种方式限制命令行的长度.
更新
回答你的问题:
(1)你可以做任何事情在bash中,你可以在做SH.我提到的一件事就是使用$(command)代替在命令周围使用反引号,并且在Mac上使用sh版本.csh,zsh,ash和fish是不同的.
(2)我认为仅仅$ open $(dirname arg)在包含目录上执行opena finder窗口.
听起来您想打开Terminal.app会话*.php中包含的所有文件querystring。
您可以这样进行:
find . -name '*.php' -exec grep -li 'querystring' {} \; | xargs open
Run Code Online (Sandbox Code Playgroud)
在我的设置中,这将打开MacVim,并将每个文件放在单独的选项卡上。YMMV。