используя команду awk, чтобы получить правильное имя - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу получить имя файла из длинной строки в сценарии оболочки. Прочитав пример из 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 голосов
/ 21 февраля 2019

Вы можете попробовать: это более надежно по сравнению со второй 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' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...