如何使用jq确定URL的最后一部分?

时间:2019-07-01 00:37:56

标签: jq

我必须区分以下两条路径。

简称: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) )'

但是不能那样做。该怎么办?

1 个答案:

答案 0 :(得分:1)

jq具有许多字符串处理功能-比检查jq manual还要糟。对于手头的任务,使用正则表达式功能可能是最好的选择,但是由于您提到了cut -d/ -f4,因此可能需要注意的是,可以通过以下方式实现相同的效果:

split("/")[3]

对于最后一个重要部分,您可以考虑:

sub("/ *$";"") | split("/")[-1]