expand - タブをスペースに変換する

expand

expandコマンドはタブをスペースに変換することができます。
タブをスペースに変換する際、タブストップ幅を考えて変換が行われます。
タブを一定のスペースに変換するコマンドではないので注意が必要です。

expandコマンドの前に

expandコマンドの行う前に、タブストップ(tab stop)について知らなければ、expandコマンドは意図した動作とは異なる動作に思えるかもしれません。

タブストップとは、テキストエディタの桁区切りのようなものです。
タブストップが「8」に設定されている場合、3文字が入力されている場合、タブを入力すると、8文字目までで止まるように表示されます(表示上では5つのスペースが開いているように見えます)。

タブストップについては、テキストエディタや文書作成ソフトで確認してみるとよいかもしれません。

expandコマンドとは

expandコマンドとは、タブをスペースに変換するコマンドです。
タブをどのくらいのスペースに変換するかはタブストップ幅で決定します。

また、タブをスペースに変換するプログラムの考え方については以下のページが参考になります。
外部リンク もう一度基礎からC言語 第41回 仕様設計からコーディングまで~タブ/スペース変換プログラムを作る(1) 仕様を考える

expandコマンドの利用例

タブストップ幅が8でスペースに変換
(オプションなし)

expandコマンドはデフォルトではタブストップ幅を8でタブをスペースに変換することができます。

コマンド例

tabfile.txt

tabfile.txt(cat -ET版) ▼表示

実行結果

分かりにくいですが、タブがスペースに変換されています。

タブストップ幅を変更
(-tオプション)

-tオプションの後に数字を指定することで、タブストップ幅を変更することができます。

コマンド例

tabfile.txt

tabfile.txt(cat -ET版) ▼表示

実行結果

タブストップをリストで指定
(-tオプション)

-tオプションは、数字をリストで指定するとタブストップを可変にすることができます。
例えば、4,8でタブストップを指定した場合、3文字のものはタブストップを4で、7文字のものタブストップを8として処理します。
また、リストの最後のタブストップ以降は一つのスペースに置き換わります。

コマンド例

tabfile.txt

tabfile.txt(cat -ET版) ▼表示

実行結果

GNU拡張として、リストの最後のタブストップ以降のタブストップを指定することができます。
コマンド例

実行結果

行頭のタブ文字のみをスペースに変換
(-iオプション)

-iオプションは行頭のすべてのタブ文字のみをスペースに変換することができます。

コマンド例

hello.c

インデントを少し深くするために、プログラムを作成しています。

hello.c(cat -ET版) ▼表示

実行結果

すべてのタブを一定のスペースに変換するには?

全てのタブを一定のスペースに変換するにはsedコマンド等を用いる事ができます。
コマンド例では、全てのタブを4つのスペースに変換しています。

コマンド例

実行結果

参考

外部リンクGnu Coreutils

外部リンクGnu Coreutils日本語版