Предположим, у меня есть 3 файла:
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
Я хочу напечатать только символы перед последним подчеркиванием(_)
Ожидаемый результат:
abc_def
abc
abc_def_ghi
решение1
Вы можете использовать bash с расширением параметров:
$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi
решение2
С помощью sed вы можете попробовать
sed -E 's/(.*)_.*/\1/'
например, скопируйте и вставьте это в командную строку
% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF
выход
abc_def
abc
abc_def_ghi
обратите внимание, эта команда оставляет sed
автоматическую печать пространства шаблона на месте, что означает, что любые другие строки, которые не соответствуют шаблону (т.е. не содержат никаких _
'), будут частью вывода. Если они вам не нужны, вы можете использовать
sed -n -E 's/(.*)_.*/\1/p'