bashでファイル名を加工する

bashでデータを書き換えるスクリプトを書く時に,出力するファイル名を作るやり方をいつも忘れるのでメモ.

変数から該当する文字列を除去する

bashでは変数のパラメータ展開によって文字列を切り取ることができます.
このときに使うのが"#","##","%","%%"の4つ.

 path=/path/to/file.txt
 file=${path##*/}
 # fileには"file.txt"が入る

“##"は前方から見て一致する最長の文字列を除去する.
上の例だと"*/"は"/path/to/"に一致する.
“#"を使うと最長ではなく最短になるので,"/"だけに一致してしまう.

 file=hoge.tar.gz
 ext=${file#*.}
 ext2=${file##*.}
 # extには"tar.gz"が入るが,ext2には"gz"が入る

“%"と"%%"は後方から見る点が異なる.

 path=/path/to/file.txt
 dir=${path%/*}
 # dirには"/path/to"が入る

“%"は"#"と同じく最短一致で,"%%"は"##"と同じく最長一致で除去される.

パラメータ展開についてのリンク

Bashの変数パラメータ展開のまとめ
bashスクリプトだけで、ファイル名、拡張子を取得する
シェルのパラメータ展開でスクリプト自身のファイル名を取得する
bash

未分類

Posted by tanitanin