シェルで変数に格納された文字列を変更しようと思ったら、最初に思いつくのはSubString
や正規表現などですが、そんな事をしなくても簡単に末尾から任意の文字を削除できる事を最近知ったのでメモっておきます。
目次
ファイル名に日付を追加する
以下の例では、ファイル名の末尾、つまりファイル名と拡張子の間に現在の日付を追加するサンプルです。
1 2 3 4 |
BASE_NAME="Sample.log" FILE_NAME=${BASE_NAME%.*}_`date "+%Y%m%d "`${BASE_NAME#${BASE_NAME%.*}} echo FILE_NAME# 実行結果 # Sample_20201122.log |
こちらのサイトを参考にさせていただきました。
シェル変数の末尾の文字を削除する - 何でも屋エンジニアのブログ
シェル変数の末尾の文字を削除する シェルスクリプトを書く際、変数の末尾についた余分な記号を取りたいとき、以下のように行っていた(以下、"bananapencilbook"という文...
解説
上記の例では、先頭の「${BASE_NAME%.*}
」で後ろから検索(後方一致)して最初の「.(ドット)」までを除去して出力。
次に、「_`date "+%Y%m%d "
」で「_(アンダーバー)」と日付を追加。
最後に、「${BASE_NAME#${BASE_NAME%.*}
」で拡張子のみを末尾に付加しています。
まとめると、こんな感じ。
1 2 3 4 5 |
${BASE_NAME%.*} → Sample_`date "+%Y%m%d " → _20201122${BASE_NAME#${BASE_NAME%.*} →.log【結果】 Sample + _20201122 + .log |
拡張子をワイルドカードで「*(アスタリスク)」にしたのは、どんな拡張子が来ても対応できるようにです。その他にも、シェルの変数展開について詳しく書かれた記事がありましたので、こちらをご参考ください。
シェルの変数展開 - Qiita
こちらも blog からの転載。シェルスクリプトを作成する際にシェル変数に値を代入したり参照したりする事は頻繁に発生するが、 シェル変数の展開にも便利な使い方がある。b...
コメント
コメント一覧 (1件)
[…] 日付を簡単に比較するために、まずはスラッシュ付の日付を数値に置き換えなくてはなりません。 そこで、以前ご紹介した記事の応用で、変数内の/(スラッシュ)を置換してあげます。 【Shell】変数内の文字列の末尾から任意の文字を削除する方法https://minory.org/shell-variable-extension.htmlシェルで変数に格納された文字列を変更しようと思ったら、最初に思いつくのはSubStringや正規表現などですが、そんな事をしなくても簡単に末尾から任意の文字を削除できる事を最近知ったのでメモっておきます。ファイル名に日付を追加する以下の例では、ファイル名の…Minory 置換する方法は以下の通りです。 […]