ども、初老丸です。
tl;dl
シェルスクリプトで変数内の文字列を置換したり、変数に代入したファイルパスからファイル名だけを取り出したいと考える際に真っ先に sed
でゴニョゴニョを思いつくが、Bash だと Bash 内で完結出来ることを以下の記事でしったので実際に試してみた。
d.hatena.ne.jp
www.gnu.org
有難うございました。
ショートメモ
サンプルスクリプト
$ cat test.sh # # - . を _ に置換する # echo "### . を _ に置換する" TEXT="www.hoge.com" echo ${TEXT} # www.hoge.com echo ${TEXT/./_} # www_hoge.com echo ${TEXT//./_} # www_hoge_com echo "" # # - ファイルパスから / を削除する # echo "### ファイルパスから / を削除する" FILE="/path/to/test.txt" echo ${FILE} # /path/to/test.txt echo ${FILE#*/} # path/to/test.txt echo ${FILE##*/} # test.txt
置換
実際にサンプルを実行すると以下のような結果となる。
$ bash test.sh ### . を _ に置換する www.hoge.com www_hoge.com www_hoge_com
ということで、文字列置換は以下の通り。
echo ${TEXT} # www.hoge.com echo ${TEXT/./_} # 最初にマッチした対象を置換 echo ${TEXT//./_} # すべてにマッチした対象を置換する
削除
実際にサンプルを実行すると以下のような結果となる。
$ bash test.sh ### ファイルパスから / を削除する /path/to/test.txt path/to/test.txt test.txt
ということで、文字列削除は以下の通り。
echo ${FILE} # /path/to/test.txt echo ${FILE#*/} # 最初にマッチした対象(*/)を削除 echo ${FILE##*/} # すべてにマッチした対象(*/)を削除
以上
これは便利、ちゃんと覚えておくべ。