【问题标题】:piping find into grep [duplicate]管道查找到 grep [重复]
【发布时间】:2020-06-10 23:56:57
【问题描述】:

我正在尝试使用否定匹配选项将 find 导入到 grep 中,但我没有得到想要的结果。我正在使用适用于 Windows 的 Ubuntu 子shell 并运行命令:

find / -name CCP.cf | grep -v '*denied'

这会产生输出(为简洁起见省略了很多):

find: ‘/mnt/c/Config.Msi’: Permission denied
find: ‘/mnt/c/Intel/IntelOptaneData’: Permission denied
find: ‘/mnt/c/Program Files/WindowsApps’: Permission denied

此打印输出是否来自 find 并且不能定向到 grep? 本质上,我希望能够使用 find 并将文件的目录返回给我(稍后我将把它包装到一个函数中)。

【问题讨论】:

  • 您正在查找文件名,而不是文件的内容。这就是你想要的吗?
  • *denied 不是有效的正则表达式。 * 前面需要一个模式。
  • 该输出来自find,它只是告诉您某些目录无法搜索,因为您没有读取这些目录的权限。

标签: bash grep find pipe


【解决方案1】:

错误消息转到标准错误,但您只是将标准输出传送到grep。要重定向stderr,也可以使用2>&1,这会将stderr (FD 1) 重定向到已经重定向到管道的stdout (FD 1)。

find / -name CCP.cf 2>&1 | grep -v 'Permission denied'

你也可以过滤掉所有的错误信息:

find / -name CCP.cf 2>/dev/null

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多