You can use Parameter Expansion to do this.

If *a* is constant, the following parameter expansion performs substring extraction:

```
b=${a:12:5}
```

where **12** is the offset (zero-based) and **5** is the length

If the underscores around the digits are the only ones in the input, you can strip off the prefix and suffix (respectively) in two steps:

```
tmp=${a#*_} # remove prefix ending in "_"
b=${tmp%_*} # remove suffix starting with "_"
```

If there are other underscores, it’s probably feasible anyway, albeit more tricky. If anyone knows how to perform both expansions in a single expression, I’d like to know too.

Both solutions presented are pure bash, with no process spawning involved, hence very fast.