You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使grep在管道输入的所有内容均不含指定模式时返回0?

解决方法

方法一:反转grep匹配结果的退出码

你需要的逻辑是「所有行都不包含指定模式时返回0」,本质就是当grep找不到任何匹配行时返回0,反之返回非0。直接用!反转grep -q的退出码就能实现:

# 输入包含b,最终返回1
echo -e "a\nb\nc" | ! grep -q b; echo $?

# 输入不包含b,最终返回0
echo -e "a\nc\nd" | ! grep -q b; echo $?

原理:grep -q b在找到匹配行时返回0,未找到时返回1;!会反转这个退出码,刚好契合你的需求。

方法二:用-L选项处理管道输入

grep -L的作用是当目标内容中没有匹配模式时,返回0(原本是针对文件输出文件名,处理管道时可指定标准输入为目标)。你可以用-或/dev/stdin指代管道传来的标准输入:

# 输入包含b,无输出,返回1
echo -e "a\nb\nc" | grep -L b -; echo $?

# 输入不包含b,输出"-"并返回0
echo -e "a\nc\nd" | grep -L b -; echo $?

如果不需要输出标识内容,加上-q选项即可:

echo -e "a\nc\nd" | grep -qL b -; echo $?

内容的提问来源于stack exchange,提问作者ataraxis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:16:34