Мне нужно проанализировать вывод команды и найти подстроку после обратной косой черты (т.е. app-v2.zip
) для файла с самой высокой версией
В приведенном ниже выводе команды я хочу найти app-v2.zip
, потому что v2
является самым высоким. Я знаю, что это требует комбинации команд bash, но не понял этого.
Вывод команды:
gs://artifacts/app-v1.zip
gs://artifacts/app-v2.zip
Желаемое значение переменной:
app-v2.zip
Почему бы и нет (for i in *.zip; do echo "${i##*/}"; done) | sort -n | tail -n1
?
Например, вы можете использовать basename
для получения имени файла, sort -V
для сортировки номеров версий и tail
для получения самой новой версии.
your-command \
| sort -V \
| tail -n1 \
| xargs basename
Если ваш вывод уже отсортирован, как в вашем примере, это тривиально:
variable=$(yourCommand |awk -F/ 'END{print $NF}')
awk -F/
: используйте /
в качестве разделителя полей.END{print $NF}
: распечатать последнее поле последней записи (строки)
В вашем случае простой
sort | tail -n1
сработает, не так ли? Другими словами, вам, вероятно, нужно немного лучше описать свою проблему.