4

Я использую ${parameter#word} и ${parameter%word} чтобы удалить префикс и постфикс строки.

$ x=2012-hello.jpg
$ y=${x#*-}
$ z=${y%.*}
$ echo $z
hello

Как я могу сделать их сразу, а не два.

2 ответа2

5

Это невозможно при расширении параметра, но возможно при сопоставлении с регулярным выражением:

x=2012-hello.jpg
[[ $x =~ .*-(.*)\.jpg ]] && echo ${BASH_REMATCH[1]}
1

Если вы согласны с использованием sed вместо расширения параметра:

x=2012-hello.jpg
$ z="$(sed -e 's/.*-\(.*\)\..*/\1/' <<<"$x")"
$ echo "$z"
hello

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .