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 このページの先頭に戻る
- シェルスクリプトのexpectで応答メッセージを振り分ける方法
- bashでPostgreSQLのselect結果を出力する方法
- bashでbackspaceが動作しない場合の対処
- bashの変数から最後の1文字を取得・削除する方法
- bashのwhile文で利用した変数がループ外で反映されない場合の対処
- bashのechoでアスタリスク「*」がワイルドカードとして展開される場合の対処
- bashの正規表現でスペース(空白)を判定する方法
- bashで文字列の長さを調べる方法
- bashで数値を判定する方法
- bashで小数点を比較する方法
- bashの配列をjoinする方法
- Bashで変数を大文字または小文字に変換する方法
- bashの変数をsplitして配列を作る方法
- シェルスクリプトでtelnet接続する方法
- bashで小数点を比較する方法
トラックバックURL
コメントする
greeting