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)パターンマッチして置換
①${変数/パターン/置換後文字列}
変数の値でパターンと最も長く一致する部分を”置換後文字列”と置換する。変数内の最初に一致した部分のみ置換される。
②${変数//パターン/置換後文字列}
変数内でパターンに一致した部分はすべて置換される。
①${変数#パターン}
変数の値の前方部がパターンと一致した場合、最も短く一致する部分を削除し、残りを返す。
②${変数##パターン}
変数の値の前方部がパターンと一致した場合、最も長く一致する部分を削除し、残りを返す。
例)変数$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
〇サンプルコード
〇ファイル名の仕様
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
- bashのシェルスクリプト実行方法
- bashのシェルスクリプト プログラミング方法メモ
- bashのパイプの使い方
- bashのlist、サブシェル、コマンドブロック
- bashでの式の評価と算術演算
- bashでパターンマッチを使って条件評価
- bashのfor文で配列やセパレータ付き文字列から各要素を取り出す
- bashのfor文を使ってディレクトリ内のファイル一覧とディレクトリ一覧を出力
- bashのselect制御構造
- bashのパターンマッチ演算子の使い方
- ファイルの中身を一行ずつ読んで文字列を置換するbashスクリプト
- ディスク使用量が多いディレクトリを抽出するbashスクリプト
- ディレクトリ内の複数のファイルに対しファイル内の文字列を置換するbashスクリプト
- Bashスクリプトでmysqldumpバックアップと世代管理
- Dos攻撃など大量アクセスのログを検知するBashスクリプトを作成