Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I use ${parameter#word} and ${parameter%word} to remove prefix and postfix of string.

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

How can I do them at once instead of two.

share|improve this question
I don't think that's possible. – Daniel Beck Jan 7 '12 at 15:24
up vote 4 down vote accepted

It is not possible with parameter expansion, but it is possible with regular expression matching:

[[ $x =~ .*-(.*)\.jpg ]] && echo ${BASH_REMATCH[1]}
share|improve this answer

If you are OK with using sed instead of parameter expansion:

$ z="$(sed -e 's/.*-\(.*\)\..*/\1/' <<<"$x")"
$ echo "$z"
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.