Linux中如何在du输出结果中使用grep -v排除指定内容?
问题原因与解决办法
你的命令没过滤掉错误行,核心原因是:du的权限错误信息输出到标准错误流(stderr),而管道|仅传递**标准输出流(stdout)**的内容,这些错误信息根本没经过grep处理,所以会直接显示出来。
另外你写的grep -v "*cannot read directory*"里的星号是多余的——grep默认匹配子串,不需要通配符星号,反而会被当成普通字符处理,导致匹配不到目标内容。
修正后的命令
方法一:保留正常输出,过滤错误行
把stderr重定向到stdout,让错误信息进入管道被grep处理:
du -hs * 2>&1 | sort -hr | grep -v "cannot read directory"
方法二:直接丢弃所有错误信息
如果不需要保留错误提示,直接把stderr输出到/dev/null即可:
du -hs * 2>/dev/null | sort -hr
补充说明
2>&1是Shell重定向语法:
2是标准错误流的文件描述符&1表示将stderr的内容重定向到当前stdout的位置,这样错误信息就会和正常输出合并进入后续管道。
内容的提问来源于stack exchange,提问作者SHM
相关产品推荐
相关产品推荐

