bashのif文で正規表現を使用する方法
小粋空間 » Programming Language » bash » bashのif文で正規表現を使用する方法
bashのif文で正規表現を使用する方法を紹介します。
1.問題点
#!/bin/bash
foo=abc123efg
変数fooの中から"123"だけを取り出したいのですが、方法が分かりません。
ということで、bashのif文で正規表現を使用する方法を紹介します。
2.if文で正規表現を使用する
if文で正規表現を使用するには次のようにします。
#!/bin/bash
foo=abc123efg
if [[ ${foo} =~ ^[a-z]+([0-9]+).*$ ]]; then
echo ${BASH_REMATCH[1]}
fi
実行結果
123
ポイントは下記のとおりです。
- if文はブラケット(大カッコ)を二重にする
- 演算子は"=~"
- 正規表現はクォーテーションで括らない(正規表現で特別扱いの文字がバックスラッシュでエスケープされるため)
- 後方参照(カッコで囲った部分)は ${BASH_REMATCH[1]} で取得(複数ある場合、[2][3]…で取得)
Perl系の表記方法("\d"や"\w"など)は使えないみたいなので、POSIX表記を利用します。
\w→[:alnum:]
\d→[:digit:]
\s→[:blank:]
詳細は"info -f 'grep' -n 'Character Classes and Bracket Expressions"で確認できます。
if文の中でPOSIX表記を使う場合、さらに"[]"で括る必要があります。
上記のサンプルを一部POSIX表記に直したものが下記です。
#!/bin/bash
foo=abc123efg
if [[ ${foo} =~ ^[a-z]+([[:digit:]]+).*$ ]]; then
echo ${BASH_REMATCH[1]}
fi
実行結果
123
3.参考サイト
参考サイトは下記です。ありがとうございました。