How to determine the last part of URL with jq?

moriaki

I have to distinguish between the following two paths.

shorter: https://www.example.com/
longer: https://www.example.com/foo/

In Bash script, using Bash built-in literals as follows returns only longer one.

$ 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

So it could be identified longer one in Bash script,
but now I have to define same filter for JSON value handled in jq.

If jq can write like the following, my goal can be achieved...

jq '. | select( .url | (cut -d/ -f4 <<< ${url2%/*})!=null) )'

But can not do that. How can do that?

peak

jq has many string-handling functions -- one could do worse than checking the jq manual. For the task at hand, using a regex function would probably be best, but since you mentioned cut -d/ -f4, it might be of interest to note that much the same effect can be achieved by:

split("/")[3]

For the last non-trivial part you could consider:

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

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related