我是优雅单行的忠实粉丝。我正在尝试编写一个单行测试,在执行http请求和搜索后输出“pass”或“fail”。我尝试过这样的事情:
curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
...但这不会失败。
也尝试过:
curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
...但我无法正确理解语法。
我该怎么做?
答案 0 :(得分:5)
如果您只是寻找针头,可以使用grep -q
获取退出代码:
if curl "http://haystack.io" | grep -q needle
then
echo "PASS"
else
echo "FAIL"
fi
您的方法存在问题:
curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
是sed
总是在表达式有效时返回成功,即使替换不触发也是如此。另外,它使用BRE,而你的正则表达式是PCRE。
在这一个:
curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
您错过了引号和间距(shellcheck会有所帮助),如果有多个匹配,它也无法正常工作。