我必须区分以下两条路径。
简称:https://www.example.com/
更长:https://www.example.com/foo/
在Bash脚本中,按以下方式使用Bash内置文字,只会返回更长的一个。
$ url1=https://www.example.com/
$ url2=https://www.example.com/foo/
$ cut -d/ -f4 <<<${url1%/*} # this returns nothing
>$
$ cut -d/ -f4 <<<${url2%/*} # this returns last part of path
>$ foo
因此可以在Bash脚本中将其标识为更长的一个,
但现在我必须为jq中处理的JSON值定义相同的过滤器。
如果jq可以像下面这样写,我的目标就可以实现...
jq '. | select( .url | (cut -d/ -f4 <<< ${url2%/*})!=null) )'
但是不能那样做。该怎么办?
答案 0 :(得分:1)
jq具有许多字符串处理功能-比检查jq manual还要糟。对于手头的任务,使用正则表达式功能可能是最好的选择,但是由于您提到了cut -d/ -f4
,因此可能需要注意的是,可以通过以下方式实现相同的效果:
split("/")[3]
对于最后一个重要部分,您可以考虑:
sub("/ *$";"") | split("/")[-1]