bashのパターンマッチ演算子の使い方

bashのパターンマッチ演算子の使い方をまとめ、簡単なサンプルスクリプトを作成してみました。

(1)bashのパターンマッチ演算子


 
1)変数の最初の部分をパターンマッチして削除
 
①${変数#パターン}
 
変数の値の最初の部分がパターンと一致した場合、最も短く一致する部分を削除し、残りを返す。
 
②${変数##パターン}
 
変数の値の最初の部分がパターンと一致した場合、最も長く一致する部分を削除し、残りを返す。
 
例)変数$tmpの値(20140530埼玉県)から日付部分を削除し、県名のみを返す
 
tmp=${tmp#$files[2][0][1-5][0-9][0-1][0-9][0-3][0-9]}
 
2)変数の最後の部分をパターンマッチして削除
 
①${変数%パターン}
 
変数の値の終わりの部分がパターンと一致した場合、最も短く一致する部分を削除し、残りを返す。
 
②${変数%%パターン}
 
変数の値の終わりの部分がパターンと一致した場合、最も長く一致する部分を削除し、残りを返す。
 
例)変数$filepathの値(20140530神奈川県.html)から拡張子部分を削除し、残りの部分を返す
 
tmp=${filepath%[.]html}
 
3)パターンマッチして置換
 
①${変数/パターン/置換後文字列}
 
変数の値でパターンと最も長く一致する部分を”置換後文字列”と置換する。変数内の最初に一致した部分のみ置換される。
 
②${変数//パターン/置換後文字列}
 
変数内でパターンに一致した部分はすべて置換される。
 

(2)サンプルコード


 
ファイル一覧取得し、日付+県名のファイル名から県名の部分のみ抽出する。
 
●ファイル名の仕様
 
20140330東京都.html
20140430神奈川県.html
20140220千葉県.html
 
●サンプルコード

#!/bin/bash

files="/home/user/html/*"
for filepath in $files; do
  if [ -f $filepath ] ; then
    tmp=${filepath%[.]html}
    tmp=${tmp#$files[2][0][1-5][0-9][0-1][0-9][0-3][0-9]}
    echo "$tmp"
  fi
done
関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です