grep命令反转选项不起作用

时间:2017-05-26 15:30:46

标签: linux bash

我试图过滤包含find命令中权限被拒绝的行。

如果我正在运行find ~ -name "fifo" | grep "Permission denied"

输出是正确的: find: ‘/home/nroby/.cache/dconf’: Permission denied find: ‘/home/nroby/.dbus’: Permission denied find: ‘/home/nroby/.config/enchant’: Permission denied

但是,如果我使用-v选项:find ~ -name "fifo" | grep -v "Permission denied"

输出是: find: ‘/home/nroby/.cache/dconf’: Permission denied find: ‘/home/nroby/.dbus’: Permission denied /home/nroby/Desktop/Linux/fifo find: ‘/home/nroby/.config/enchant’: Permission denied

1 个答案:

答案 0 :(得分:6)

Permission denied的行来自stderr,而不是stdout。终端显示两个流,但管道仅重定向stdout(因此,使用您的命令,grep永远不会看到包含Permission denied的行。

所以,如果您只想让这些消息静音,请改为:

find ~ -name "fifo" 2>/dev/null

2>重定向stderr

如果由于某种原因需要同时管道stdoutstderr(例如,您希望输出中存在其他错误消息),则可以执行以下操作:< / p>

find ~ -name "fifo" 2>&1 | grep -v "Permission denied"

2>&1stderr重定向到stdout