Caq*_*aqu -1 macos bash grep curl sed
我是优雅单行的忠实粉丝.我正在尝试编写一个单行测试,在执行http请求和搜索后输出"pass"或"fail".我尝试过这样的事情:
curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
Run Code Online (Sandbox Code Playgroud)
......但这不会失败.
还尝试过:
curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
Run Code Online (Sandbox Code Playgroud)
...但我无法正确理解语法.
我怎样才能做到这一点?
如果你只是寻找针,你可以grep -q用来获得退出代码:
if curl "http://haystack.io" | grep -q needle
then
echo "PASS"
else
echo "FAIL"
fi
Run Code Online (Sandbox Code Playgroud)
您的方法存在问题:
curl "http://haystack.io" | sed 's/.*?needle.*/PASS/' || echo FAIL
Run Code Online (Sandbox Code Playgroud)
是sed表达式有效时始终返回成功,即使替换未触发也是如此.另外,它使用BRE,而你的正则表达式是PCRE.
在这一个:
curl "http://haystack.io" | if [$(grep -oE "needle") = "needle"]; then echo PASS; else echo FAIL; fi
Run Code Online (Sandbox Code Playgroud)
你缺少引号和间距(shellcheck会帮助你),如果有多个匹配,它也不起作用.