Как написать регулярное выражение?

Подскажите как составить регулярку, на файлы:
aaa_bbb_ccc_800x600.jpg
vvv_xxx-yyy_zzz_xxx-1_800x600.webp
Уточнение: Вместо 1 может быть 1..99, 800x600 тоже может разным, отталкиваться нужно от последнего символа "_" и проверять есть ли перед ним цифры с тире: -[0-9]+

нужно получить:
aaa_bbb_ccc
vvv_xxx-yyy_zzz_xxx

У меня получилось что-то типа такого:
echo $string | egrep -o '[0-9a-Z_-]+[^-0-9\.]+[a-z]{3,4}'
и ответ вроде верный, но если к примеру файл будет:
pict3_480x300.jpg или 3_480x300.jpg
то уже не работает
  • Вопрос задан
  • 87 просмотров
Решения вопроса 2
@marxxt
понравился ответ - поставь ✔
Может так

echo $string | grep -oP '^.+?(?=(-|_)(?=\d))'
Ответ написан
@q27off
sed -re 's/(.*)_.*/\1/' -e 's/(.*)\-[0-9]+$/\1/' <<< 'aaa_bbb_ccc_800x600.jpg'
sed -re 's/(.*)_.*/\1/' -e 's/(.*)\-[0-9]+$/\1/' <<< 'vvv_xxx-yyy_zzz_xxx-1_800x600.webp'
sed -re 's/(.*)_.*/\1/' -e 's/(.*)\-[0-9]+$/\1/' <<< 'pict3_480x300.jpg'
sed -re 's/(.*)_.*/\1/' -e 's/(.*)\-[0-9]+$/\1/' <<< '3_480x300.jpg'
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы