# If *x* 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.
#
# [JB.] [so/q/428109] [cc by-sa 3.0]
$
cheat.sh