Bashで正規表現マッチした文字列を取り出す

More than 1 year has passed since last update.

#!/bin/bash

version="4.10.1"

if [[ ${version} =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
all=${BASH_REMATCH[0]}
major=${BASH_REMATCH[1]}
minor=${BASH_REMATCH[2]}
patch=${BASH_REMATCH[3]}

echo ${all} # 4.10.1
echo ${major} # 4
echo ${minor} # 10
echo ${patch} # 1
fi


ポイント


  • 比較部分は [[ ]] で囲う

  • 比較部分は =~

  • 右辺の正規表現部分は "" で囲わない

  • 右辺の正規表現部分でマッチさせて取り出したい部分をカッコで囲う


  • ${BASH_REMATCH[0]} にはマッチした文字列全体が入る

  • カッコで囲った部分が ${BASH_REMATCH[1]} 以降順番に得られる