如果不匹配,则grep返回0

时间:2019-09-04 12:51:59

标签: grep return match

是否有任何bash脚本可以通过grep命令向我返回result = true?

示例:我的CF日志中有1000条103.12.88记录。 如果检测到1个或多个结果,我可以做grep 103.12.88,然后打印/输出结果显示是YES还是True

3 个答案:

答案 0 :(得分:2)

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

echo thing | grep x || true

这仍将输出0返回码。

答案 1 :(得分:0)

您正在错误地处理返回值。

value=$( grep -ic "210.64.203" /var/logs )

value设置为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

答案 2 :(得分:0)

如果您想在 grep 上成功返回而不找到匹配项,则取反其输出会更容易:

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

由于在输出中未找到“朋友”,因此将打印No match

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

由于在输出中找到了朋友 ,因此此命令不会打印任何内容。

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