查找,grep和执行 - 一体化?

cwd*_*cwd 18 shell grep find

这是我用来在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窗口.


Joh*_*web 5

听起来您想打开Terminal.app会话*.php中包含的所有文件querystring

您可以这样进行:

find . -name '*.php' -exec grep -li 'querystring' {} \; | xargs open
Run Code Online (Sandbox Code Playgroud)

在我的设置中,这将打开MacVim,并将每个文件放在单独的选项卡上。YMMV。