У меня есть строка в сценарии оболочки, которая
list = "apr/2018-06-24 17_10_39/2018-06-24 17_10_39.html
apr/2018-06-24 17_10_39/access_log.zip
apr/2018-06-25 17_12_48/2018-06-25 17_12_48.html
apr/2018-06-25 17_12_48/access_log.zip
apr/2018-06-26 17_13_36/2018-06-26 17_13_36.html
DS_BLS_731.dat
DS_BLS_732.dat
DS_BLS_733.dat
apr/2018-06-26 17_13_37/ DS_BLS_739.dat
apr/2018-06-26 17_13_38/ DS_BLS_738.dat
apr/2018-06-26 17_13_39/ DS_BLS_737.dat"
Мне нужно найти DS_BLS_max (порядковый номер) .dat
здесь DS_BLS_max (порядковый номер) .dat = DS_BLS_739.dat





grep -o 'DS_BLS_[0-9]*\.dat' <<< "$list" | sort -V | tail -n 1
Выход:
DS_BLS_739.dat
См .: Часто задаваемые вопросы о регулярных выражениях Stack Overflow
@ Cyrus .. спасибо за ответ. Решение работает нормально .. Что делать, если мне нужно получить всю строку. например, apr / 2018-06-26 17_13_37 / DS_BLS_739.dat должен возвращать apr / 2018-06-26 17_13_37 / DS_BLS_739.dat, но он возвращает только DS_BLS_739.dat
@ user1643763: С Преобразование Шварца и GNU sed: sed -nE '/DS_BLS_[0-9]*\.dat/{s/.*(DS_BLS_[0-9]*\.dat).*/\1 &/p}' file | sort -V | tail -n 1 | cut -d " " -f 2-
Однако обратите внимание, что
11 < 2 < 3в лексической сортировке. Так что, если у вас естьDS_BLS_1739.dat, вы не получите его на максимуме.