如果不匹配,grep返回0

如果不匹配,grep返回0,grep,return,match,Grep,Return,Match,是否有任何bash脚本可以使用grep命令返回result=true 示例:我的CF日志中有1000条103.12.88的记录。 如果检测到一个或多个结果,然后打印/输出结果显示“是”或“真”,是否可以执行grep 103.12.88?您处理的返回值不正确 value=$( grep -ic "210.64.203" /var/logs ) 将值设置为grep的输出,而不是其返回代码 执行命令后,退出代码存储在$?中,但您通常不需要它 if grep -ic "210.64.203" /var

是否有任何bash脚本可以使用grep命令返回result=true

示例:我的CF日志中有1000条103.12.88的记录。
如果检测到一个或多个结果,然后打印/输出结果显示“是”或“真”,是否可以执行grep 103.12.88?您处理的返回值不正确

value=$( grep -ic "210.64.203" /var/logs )
值设置为grep的输出,而不是其返回代码

执行命令后,退出代码存储在
$?
中,但您通常不需要它

if grep -ic "210.64.203" /var/logs 
then echo "Found..."
else echo "not found"
fi
如果需要该值,则测试内容

rec="$( grep -ic "210.64.203" /var/logs )"
if [ -n "$rec" ] ; then echo found; fi
或者如果使用
bash

if [[ "$rec" ]] ; then echo found; fi
虽然我更喜欢直言不讳-

if [[ -n "$rec" ]] ; then echo found; fi

这个问题的实际答案是在命令末尾添加
| | true
,例如:

echo thing | grep x || true

这仍然会输出一个0返回码。

如果您希望在grep上返回成功,但未找到匹配项,则更容易否定其输出:

echo "Hello, World" | not grep -q "Friend" && echo "No match"
由于在输出中未找到“Friend”(朋友),因此打印的
不匹配

echo "Hello, World" | not grep -q "Hello" && echo "No match"
这不会打印任何内容,因为在输出中找到了friend

echo "Hello, World" | not grep -q "Hello" && echo "No match"

请注意,我们正在使用标志
-q
(如
--quiet
),因此如果找到匹配项,grep不会写入输出,而是以状态0退出。

我已尝试过此操作,但结束值=$(grep-ic“210.64.203”/var/logs)如果[$value-eq 1],则返回“I found 210.64.203”结果第2行:[:太多的论点这个问题的标题有点奇怪。如果没有匹配项,通常应视为失败,因此返回0是不合适的。事实上,
grep
如果匹配,则返回0,如果不匹配,则返回非零。嗨,William,实际上,如果没有找到结果,我更喜欢有一个输出。因此,我想ng“0”表示否/错误,因此我的评论。在shell中,
0
表示成功。非零表示失败。这是一个重要的约定。嗨,威廉,注意到了,谢谢!与
if[!“$rec”=“”]
相比,编写
if[-n“$rec”]
编辑通常更干净。我总是使用
[[
bash
中,但是因为我很少使用
[
所以我在测试时没有想到尝试它。谢谢。没有。这会强制返回0,但根本不会生成输出。尝试
ret=$(echo thing | grep x | true)
vs
ret$(echo thing | grep-q x;echo$)
前者将
$ret
保留为空。后者加载退出代码。可能您的意思是
echo thing | grep x&&echo true
?不。我希望始终返回0返回代码,无论grep是否匹配(在本例中,它不会)。退出代码和输出是分开的。OP说
我能做一个grep 103.12.88吗?如果检测到一个或多个结果,那么打印/输出结果显示YES或True,这就是输出。您的解决方案很好,它只是不做措辞拙劣的OP要求的事情。这不起作用-bash中没有
not
,第二行没有ed print。您使用的是另一个shell吗?既然您提到了它,似乎
不是
是一个随
LLVM
附带的程序(我已经安装了)。我将尝试收集更多信息以更新我的答案,但感谢您注意到这个问题。我想知道为什么它对我不起作用:)