[Bash]正規表現マッチした部分文字列を再利用する方法
つまり文字列の加工を自由自在にすることができます。
例:"foo_bar"から"foo"や"bar"を取り出したい
[[ "foo_bar" =~ ^(*)_(*)$ ]]
ここでマッチした部分文字列は、BASH_REMATCHという配列に格納されています。
# マッチした全体を参照したい場合
TOTAL=${BASH_REMATCH[0]}
echo $TOTAL # => foo_bar
# ()でマッチした部分文字列を取り出したい場合
LEFT=${BASH_REMATCH[1]}
echo $LEFT # => foo
シェルスクリプトで書くなら下記ような感じで。
#!/bin/bash
if [[ "foo_bar" =~ ^(.+)_(.+)$ ]] ; then
echo ${BASH_REMATCH[0]} # => foo_bar
echo ${BASH_REMATCH[1]} # => foo
echo ${BASH_REMATCH[2]} # => bar
fi
こんな感じで、sedやawkやperlを使わなくてもbashだけで文字列の加工をすることができます。どいういうときに便利かというと、例えば大量のファイルを一括でリネームしたいときに役にたちます。
ぜひ一度お試しあれ。
カテゴリ:
Bash