如何在 Bash 中获取 http 链接的最后一部分?

如何在 Bash 中获取 http 链接的最后一部分?

我有一个http链接:

http://www.test.com/abc/def/efg/file.jar 

我想将最后一部分 file.jar 保存到变量中,因此输出字符串是“file.jar”。

健康)状况:链接可以有不同的长度,例如:

http://www.test.com/abc/def/file.jar.

我这样尝试过:

awk -F'/' '{print $7}'

,但问题是 URL 的长度,所以我需要一个可用于任何 URL 长度的命令。

答案1

这样做awk是可行的,但这有点像用榴弹炮猎鹿。如果您的 URL 已经是裸露的,那么将其放入 shell 变量并使用bash的内置参数替换即可非常简单地执行您想要的操作:

$ myurl='http://www.example.com/long/path/to/example/file.ext'
$ echo ${myurl##*/}
file.ext

其工作方式是删除贪婪匹配“*/”的前缀,这就是该##运算符的作用:

${haystack##needle} # removes any matching 'needle' from the
                    # beginning of the variable 'haystack'

答案2

basename并且dirname也适用于 URL:

> url="http://www.test.com/abc/def/efg/file.jar"
> basename "$url"; basename -s .jar "$url"; dirname "$url"
file.jar
file
http://www.test.com/abc/def/efg

答案3

使用awk, 您可以使用$NF, 来获取最后一个字段,无论字段数量如何:

awk -F / '{print $NF}'

如果将该字符串存储在 shell 变量中,则可以使用:

a=http://www.test.com/abc/def/efg/file.jar
printf '%s\n' "${a##*/}"

答案4

一种方法是对revURL 进行剪切,然后rev再剪切该字段。例如:

echo 'http://www.test.com/abc/def/efg/file.jar ' | rev | cut -d '/' -f 1 | rev

输出:

file.jar 

示例2:

echo 'http://www.test.com/abc/cscsc/sccsc/def/efg/file.jar ' | rev | cut -d '/' -f 1 | rev

输出:

file.jar

相关内容