Вы можете использовать расширение параметра bash, чтобы удалить самую длинную строку после дефиса и цифры:
for file in *
do
printf '%s turns into %s\n' "${file}" "${file%%-[[:digit:]]*}"
done
Чтобы получить все до первого тире, за которым следует цифра:
sed -E 's/-[[:digit:]].*$//' file
путем замены первого дефиса и цифры до конца строки пустой строкой.
В вашем примере я вижу -i18n
в строке, которой посчастливилось выжить. Возможно, вы хотели бы иметь более строгие требования, например, соответствие первого тире + числа + точки + числа будет таким:
sed -E 's/-[[:digit:]]+\.[[:digit:]]+.*$//' file