我有一个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
一种方法是对rev
URL 进行剪切,然后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