gpt4 book ai didi

shell - 查找、grep 和执行 - 合而为一?

转载 作者:行者123 更新时间:2023-12-03 13:19:48 27 4
gpt4 key购买 nike

这是我一直用于在当前目录中的 php 文件中查找匹配项 (queryString) 的命令,grep 不区分大小写,并在行中显示匹配结果:

找 。 -iname "*php"-exec grep -iH queryString {}\;

有没有办法也可以将匹配的文件名通过管道传输到另一个脚本?

我可能会运行 -exec 命令两次,但这似乎效率低下。

我想在 Mac OS X 上做的实际上是在查找器中“显示”该文件。我想我可以处理那部分。如果我不得不放弃内联匹配,而只让 grep 显示文件名,然后将其通过管道传输到第三个脚本,那也没关系 - 我会解决的。

但实际上我什至不确定如何将输出(匹配的文件名)通过管道传输到其他地方...

帮助! :)

澄清

我想在查找器窗口中显示每个文件 - 所以我可能不会使用 -q标记并停在第一个。

我将在控制台中运行它,理想情况下我希望看到在那里打印的内联匹配,以及能够将它们通过管道传输到另一个脚本,如 oascript(applescript,以在查找器中显示它们)。这就是为什么我一直在使用 -H - 因为我喜欢同时看到文件名和匹配项。

如果我不得不满足于只使用 -l这样文件名可以更容易地通过管道传输到另一个脚本,这也可以。但是我认为在查看了@Charlie Martin 的以下回复后,xargs 在这里可能有助于使用单个 find 和单个 grep 命令同时执行这两项操作。

我确实说过 bash 但我真的不介意这是否需要作为 /bin/sh 运行相反 - 我还不太了解这些差异,但我知道有一些重要的差异。

谢谢大家的回复,我将在命令行中尝试其中的一些,看看是否可以让其中的任何一个工作,然后我想我可以选择最佳答案。如果您想让我澄清更多内容,请发表评论。

再次感谢!

最佳答案

你打赌。通常的事情是这样的

  $ find /path -name pattern -print | xargs command

所以你可能会做
  $ find . -name '*.[ch]' -print | xargs grep -H 'main' 

(测验:为什么 -H?)

你可以继续下去;例如。你可能会用
  $ find . -name '*.[ch]' -print | xargs grep -H 'main' | cut -d ':' -f 1

获取包含“main”的文件的文件名向量,或
  $ find . -name '*.[ch]' -print | xargs grep -H 'main' | cut -d ':' -f 1 |
xargs growlnotify -

让每个名字都成为咆哮通知。

你也可以这样做
 $ grep pattern `find /path -name pattern`

或者
 $ grep pattern $(find /path -name pattern)

(在 bash(1) 中,至少这些是等效的)但是您可能会遇到命令行长度的限制。

更新

回答您的问题:

(1) 你可以在 bash 中做任何你可以在 sh 中做的事情。我提到的一件事会有所不同,那就是使用 $(command)代替在命令周围使用反引号,这适用于 Mac 上的 sh 版本。 csh、zsh、ash 和fish 是不同的。

(2) 我认为只是在做 $ open $(dirname arg)将在包含目录上打开一个查找窗口。

关于shell - 查找、grep 和执行 - 合而为一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com