gpt4 book ai didi

bash - Linux bash 解析 URL

转载 作者:行者123 更新时间:2023-12-02 18:05:41 25 4
gpt4 key购买 nike

如何解析url,例如:https://download.virtualbox.org/virtualbox/6.1.36/VirtualBox-6.1.36-152435-Win.exe

那么只剩下 virtualbox.org/virtualbox/6.1.36 了?

TEST_URLS=(
https://download.virtualbox.org/virtualbox/6.1.36/VirtualBox-6.1.36-152435-Win.exe
https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.4.4/npp.8.4.4.Installer.x64.exe
https://downloads.sourceforge.net/project/libtirpc/libtirpc/1.3.1/libtirpc-1.3.1.tar.bz2
)

for url in "${TEST_URLS[@]}"; do
without_proto="${url#*:\/\/}"
without_auth="${without_proto##*@}"
[[ $without_auth =~ ^([^:\/]+)(:[[:digit:]]+\/|:|\/)?(.*) ]]
PROJECT_HOST="${BASH_REMATCH[1]}"
PROJECT_PATH="${BASH_REMATCH[3]}"

echo "given: $url"
echo " -> host: $PROJECT_HOST path: $PROJECT_PATH"
done

最佳答案

使用sed来匹配子域是否存在(无论多深)。

$ sed -E 's~[^/]*//(([^.]*\.)+)?([^.]*\.[a-z]+/[^0-9]*[0-9.]+).*~\3~' <<< "${TEST_URLS[0]}" 
virtualbox.org/virtualbox/6.1.36

或者循环

for url in "${TEST_URLS[@]}"; do
sed -E 's~[^/]*//(([^.]*\.)+)?([^.]*\.[a-z]+/[^0-9]*[0-9.]+).*~\3~' <<< "$url"
done

virtualbox.org/virtualbox/6.1.36
github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.4.4
sourceforge.net/project/libtirpc/libtirpc/1.3.1

关于bash - Linux bash 解析 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73318360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com