I've got this little script in `sh` (Mac OSX 10.6) to look through an array of files. Google has stopped being helpful at this point:

    files="*.jpg"
    for f in $files
        do
            echo $f | grep -oEi '[0-9]+_([a-z]+)_[0-9a-z]*'
            name=$?
            echo $name
        done

So far (obviously, to you shell gurus) `$name` merely holds 0, 1 or 2, depending on if `grep` found that the filename matched the matter provided. **What I'd like is to capture what's inside the parens `([a-z]+)` and store that to a variable**.

I'd like **to use `grep` only, if possible**. If not, please no Python or Perl, etc. `sed` or something like it – I'm new to shell and would like to attack this from the *nix purist angle.

Also, as a **super-cool bonu**s, I'm curious as to how I can concatenate string in shell? Is the group I captured was the string "somename" stored in $name, and I wanted to add the string ".jpg" to the end of it, could I `cat $name '.jpg'`?

Thanks! And please explain what's going on, if you've got the time.