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

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

※目次をクリックすると目次の下部にコンテンツが表示されます。

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)パターンマッチして置換
 
①${変数/パターン/置換後文字列}
 
変数の値でパターンと最も長く一致する部分を”置換後文字列”と置換する。変数内の最初に一致した部分のみ置換される。
 
②${変数//パターン/置換後文字列}
 
変数内でパターンに一致した部分はすべて置換される。

サンプルコード
ファイル一覧取得し、日付+県名のファイル名から県名の部分のみ抽出する。
 
〇ファイル名の仕様
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

関連記事の目次

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください