下記のファイルを読み込んで、[]で囲まれた部分が"DATA"+数字4桁の時に
[]で囲まれた"DATA"+数字4桁をシェルスクリプトで出力したい。
具体的には、five [DATA1001]の行があったら、DATA1001と抽出します。
pythonなどで書いてしまえば簡単だと思うのですが、
myokoymさんの「シェルスクリプトで部分文字列を切り出す方法」を読んで
http://d.hatena.ne.jp/myokoym/20110408/1302292907
cutやsedではできていたのですが、BASH_REMATCHという配列が使えると知ったのでやってみました。
入力データ
$ cat data.txt
one
two
three
four
five [DATA1001]
six
seven
eight
nine
ten [DATA1002]
script
#!/bin/bash
TARGET_FILE="data.txt"
while read LINE
do
if [[ $LINE =~ ^.*\[(DATA[0-9]{4})\].*$ ]]
then
echo "${BASH_REMATCH[1]}"
fi
done < $TARGET_FILE
結果
./test.sh
DATA1001
DATA1002
メモ:
DATA[0-9]{4}: DATAに続く数字4桁
(DATA[0-9]{4}): 正規表現に最初にマッチした部分をBASH_REMATCH[1]に入れるためにカッコで囲む
if [[ $LINE =~ 正規表現 ]]: 正規表現に一致したらtrue
\[(DATA[0-9]{4})\]: 正規表現に[ ]を書く時エスケープ文字をつける