bash の正規表現マッチで後方参照。
bash の [[ コマンドで、正規表現マッチが使える話は以前書きました。
そのときには、意図的に書きませんでしたが、bashの正規表現マッチでは後方参照が使えます。bash rematch の変数に格納されます。
ちなみに、rematchは re:match ではなく、regex matchのre だと思います。
bash の正規表現マッチと後方参照
とりあえず、動作例を見てください。
takuya@:~$ [[ takuya =~ taku(.+) ]]
takuya@:~$ echo ${BASH_REMATCH[@]}
takuya ya
後方参照は、BASH_REMATCH
BASH_REMATCH の変数に、配列で返ってきます。コレだけ覚えておけば十分。
配列は、 BASH_REMATCH[0] がマッチ全体で、BASH_REMATCH[n] が後方参照にマッチをした箇所
後方参照は意外に使える。
正規表現マッチだけじゃなく、後方参照で文字列を抜き出すのは意外に使えると思います。
[[ $name =~ $regex ]]
if [[ -v BASH_REMATCH[1] ]] ; then
echo ${BASH_REMATCH[1]}
str=${BASH_REMATCH[1]}
if
などとして、正規表現マッチを使って文字列を抜き出したり加工したり出来るのは重宝しそうですね。
なので、extglobの正規表現っぽい glob パターン を使うのは避け、正規表現をガンガン使ったほうがマシなのではないでしょうか。
extglob でも十分かもしれませんが、extglob はon/off が設定環境依存になるのに対し、正規表現は設定無しでいけます。
grep で正規表現で後方参照したくてもできないときに活用してはいかがでしょうか。