トップページへ

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

ポイントは下記のとおりです。

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.参考サイト

参考サイトは下記です。ありがとうございました。

« 前の記事へ

次の記事へ »

トップページへ