bashのブレース展開

現在、Linuxサーバの保守・運用の作業に携わっていまして、ファイルを修正する際にバックアップファイルの作成、元ファイルとの差分確認など行うことがあります。
その作業の中で、上司から「ブレース展開」という方法を教わったので、備忘録もかねてご紹介します。

 

「ブレース展開」とは、中括弧(ブレース)で囲んだ中に、カンマ区切りで文字列を列挙すると、列挙した順に展開され、半角スペース区切りのリストにしてくれます。
これを活用すると、文字列の前部や後部に共通する文字列があった場合に省略して1つにまとめて書くことができます。

 

例えば、こんな感じです。

文字列の前部に共通文字列があった場合、echo 7月{01日,02日,03日}

文字列の後部に共通文字列があった場合、echo {わかめ,月見,たぬき}うどん

 

この「ブレース展開」を活用して、前述のファイルの修正作業を行ってみます。

 

作業の流れは以下です

  1. 元ファイル(原本)の中身を出力
  2. バックアップファイルの作成(コピー)
  3. 修正用ファイルの作成(コピー)
  4. 修正用ファイルの編集
  5. 修正内容の確認(元ファイルと修正用ファイルの差分)
  6. ファイル更新と更新内容の確認(バックアップファイルと元ファイル(原本)の差分)

 

1.元ファイル(原本)の中身を出力

はじめにこのようなファイルがあるとします。

favorite_food.txt:「私は、うどん派です。」

 

2.バックアップファイルの作成(コピー)

バックアップファイルを作成します。

cp –p 元ファイル バックアップファイル(.bak)

※オプション-p:オリジナルファイルの所有者・グループ・アクセス権・アクセス時刻を保存する。

これをブレース展開でやってみると、(※一旦、.bakファイルは消してます)

cp –p 元ファイル{,.bak}

で実行します。

 

{,.bak}なので、

左からカンマ区切りで、1つ目の「」(空文字)、2つ目が「.bak」です。

つまり、

cp –p 元ファイル 元ファイル.bak

を実行したことと同じになります。

 

3.修正用ファイルの作成(コピー)

直接、元のファイルを修正しても良いですが、ここでは、修正用ファイルを作成します。

cp –p 元ファイル 修正用ファイル(.new)

ブレース展開を使ってみます。(※.newファイルは一旦消しています)

cp –p 元ファイル{,.new}

なので、

cp –p 元ファイル 元ファイル.new

を実行したことと同じになります。

 

4.修正用ファイルの編集

修正用ファイルを編集し、内容を出力します。(編集作業は省略します)

favorite_food.txt.new:「私は、そば派です。」

うどん派からそば派への好みの変化の修正をします。

 

5.修正内容の確認(元ファイルと修正用ファイルの差分)

diff 元ファイル 修正用ファイル(.new)

元ファイル(上)がうどん派。

修正用ファイル下)がそば派。

 

またブレース展開を使ってみます。

diff 元ファイル{,.new}

なので、

diff 元ファイル 元ファイル.new

を実行したことと同じになります。

 

6.ファイル更新と更新内容の確認(バックアップファイルと元ファイル(原本)の差分)

修正用ファイルで元のファイルを上書きし、ファイルを更新します。

cp –p 修正用ファイル(.new) 元のファイル

favorite_food.txt:「私は、そば派です。」

好みが変わっていることが確認できました。

 

ファイルの内容を差分チェックすると、

修正前のバックアップファイルがうどん派。

修正後の元ファイルがそば派。

 

これもブレース展開でやると、(※favorite_food.txtは一旦消しています)

ファイルの上書きは、

cp -p 元ファイル{.new,}

なので、

cp -p 元ファイル.new 元ファイル

を実行したことと同じになります。

 

ファイルの差分チェックは、

diff 元ファイル{.bak,}

なので、

diff 元ファイル.bak 元ファイル

を実行したことと同じになります。

 

以上が、ブレース展開を使用した一例です。

 

今回ご紹介したカンマ区切りの文字列列挙のパターン以外だと、2重ドット区切りで数字またはアルファベットを指定すると、指定した数字またはアルファベットの間の連続値に展開されます。

 

  • 2重ドット区切りの数字の展開:{1..5}

  • 2重ドット区切りのアルファベットの展開:{a..e}

 

今後も何か学んだ際は、ご紹介できればと思います。

 


◆WEB会議/セミナーシステム『Szia』
https://www.ois-yokohama.co.jp/szia/

◆サーバサイドで動作するミドルウェア『ReDois』
https://www.ois-yokohama.co.jp/redois/wp_redois/

◆AIがトレンドトピックをもとに、読まれそうな記事タイトルを自動生成『AI Title Maker』
https://ai-title.com/