Unix shells do not traditionally have regex support built-in. Bash and Zsh both do, so if you use the =~
operator to compare a string to a regex, then:
You can get the substrings from the $BASH_REMATCH
array in bash.
In Zsh, if the BASH_REMATCH
shell option is set, the value is in the $BASH_REMATCH
array, else it's in the $MATCH/$match
tied pair of variables (one scalar, the other an array). If the RE_MATCH_PCRE
option is set, then the PCRE engine is used, else the system regexp libraries, for an extended regexp syntax match, as per bash.
So, most simply: if you're using bash:
if [[ "$variable" =~ unquoted.*regex ]]; then
matched_portion="${BASH_REMATCH[0]}"
first_substring="${BASH_REMATCH[1]}"
fi
If you're not using Bash or Zsh, it gets more complicated as you need to use external commands.