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.参考サイト
参考サイトは下記です。ありがとうございました。
Posted by yujiro このページの先頭に戻る
- シェルスクリプトで動作するコマンドラインインタフェース
- bashで小数点を比較する方法
- bashの配列をjoinする方法
- Bashで変数を大文字または小文字に変換する方法
- bashの変数をsplitして配列を作る方法
- シェルスクリプトでtelnet接続する方法
- bashで小数点を比較する方法
- bashでCGIを実行する
- bashで「value too great for base」というエラーになる場合の対処
- bashのfor文のまとめ
- bashで演算を行う方法
- bashで引数に配列を設定する方法
- bashで変数の値を変数名にする方法
- bashで変数を正規表現で置換して変数に代入する方法
- bashで変数を簡単に制御するための演算子
zenback
人気エントリー
トラックバックURL
コメントする
greeting