我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
。
编辑
正如下面的正确答案中提到的,“权限被拒绝”消息出现在stderr
and 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
简单地丢弃写入的所有内容标准错误。