मैं शेल स्क्रिप्ट में एक लंबी स्ट्रिंग से फ़ाइल नाम प्राप्त करना चाहता हूं। 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 होना चाहिए।

awk
0
J.Doe 21 फरवरी 2019, 19:50

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' 
1
P.... 22 फरवरी 2019, 03:39