【问题标题】:Understanding the { } /dev/null \; when using find with -exec了解 { } /dev/null \;将 find 与 -exec 一起使用时
【发布时间】:2017-01-25 19:07:24
【问题描述】:

我正在尝试理解这一行:

find $HOME -name "*.c" -exec grep "find this string" {} /dev/null \;

我了解其中的大部分内容,但我不确定出现在{} 之后和; 之前的/dev/null

find 定位每个 C 程序文件,然后对于每个文件,grep 查找包含字符串的行...然后将所有错误发送到/dev/null

【问题讨论】:

  • 它似乎没有向/dev/null 发送任何东西,它把它作为第二个参数提供给 grep,而 grep 永远不会在那里找到任何东西。事实上,在我看来,它没有任何效果。
  • 这很奇怪,因为它在我上学的 Unix 教科书中

标签: bash unix grep find exec


【解决方案1】:

它用于强制 grep 打印匹配的文件名,仅在没有特定选项的 grep 中有用。看:

$ cat file
1
2
3

$ grep 2 file
2

$ grep 2 file /dev/null
file:2

以前需要它来获取该输出,但现在使用 GNU grep(和其他?)您可以这样做:

$ grep -H 2 file
file:2

您可能需要查看教科书上的销售截止日期;-)。

【讨论】:

  • 非常好的解释答案。我认为 POSIX grep 对此有一个选项,但 -l 是文件名 only,而不是匹配项。教科书应该明确解释为什么/dev/null作为参数传递,因为它基本上只是用于触发副作用。
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多