我想从shell脚本中的长字符串中获取文件名。从likegeeks.com中读取一些示例后,我编写了一个简单的解决方案:
#/bin/bash
cdnurl="http://download.example.com.cn/download/product/vpn/rules/vpn_patch_20190218162130_sign.pkg?wsSecret=9cadeddedfr7bb85a20a064510cd3f353&wsABSTime=5c6ea1e7"
echo ${cndurl}
url=`echo ${cdnurl} | awk -F'/' '{ print $NF }'`
result=`echo ${url} | awk -F '?' '{ print $1}'`
echo ${url}
echo ${result}
我只想获取vpn_patch_20190218162130_sign.pkg,而且确实如此。我想知道是否有任何聪明的方法(可能是一行)。
如果在pkg后面不是?,如何使用pkg获取文件名,我不确定是否总是? pkg之后,但文件名始终为* .pkg。
答案 0 :(得分:1)
您可以尝试:与第二个awk
命令相比,它更健壮:
echo "$cdnurl"|awk -v FS='/' '{gsub(/?.*/,"",$NF);print $NF}'
vpn_patch_20190218162130_sign.pkg
#less robust
echo "$cdnurl"|awk -vFS=[?/] '{print $(NF-1)}'
您应该使用sed
:
sed -r 's|.*/(.*.pkg).*|\1|g'