如何从查找输出中过滤那些“权限被拒绝”?

如何从查找输出中过滤那些“权限被拒绝”?

sed最近开始使用。我使用它的一种方便方法是忽略日志文件中不重要的行:

tail -f example.com-access.log | sed '/127.0.0.1/d;/ELB-/d;/408 0 "-" "-"/d;'

但是当我尝试将其与 类似地使用时find,结果并不符合预期。我试图忽略任何包含“权限被拒绝”的行,如下所示:

find . -name "openssl" | sed '/Permission denied/d;'

但是,我仍然收到一大堆“权限被拒绝”消息stdout

编辑

正如下面的正确答案中提到的,“权限被拒绝”消息出现在stderrand NOT中stdout

答案1

问题是错误输出打印到标准错误,因此该sed命令无法捕获输入。简单的解决方案是:将 stderr 重定向到 stdout。

find . -name "openssl" 2>&1 | sed '/Permission denied/d;'

答案2

我不知道你为什么要尝试使用sed删除没有权限来自 的输出的消息find- 除非您想学习如何使用sed.

我会简单地运行这个:

寻找 。 -名称“openssl”2>/dev/null

在这里,我正在重定向标准错误(文件描述符2)转到/dev/null(参见man null)。换句话说,2>/dev/null简单地丢弃写入的所有内容标准错误

相关内容