使用awk命令获取正确的名称

时间:2019-02-21 16:50:43

标签: awk

我想从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。

1 个答案:

答案 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'