LoginSignup
9
17

More than 3 years have passed since last update.

シェルスクリプトで正規表現を使い、ファイルから文字列を抽出

Last updated at Posted at 2018-08-08

下記のファイルを読み込んで、[]で囲まれた部分が"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})\]: 正規表現に[ ]を書く時エスケープ文字をつける

9
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
17