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

スポンサーリンク

expandコマンドはタブをスペースに変換することができます。

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

expandコマンドの前に

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

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

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

expandコマンドの利用例

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

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

コマンド例

tabfile.txt

実行結果

タブ文字はページ上の表現でずれて見えるかもしれません。ご了承ください。
分かりにくいですが、タブがスペースに変換されます。cat -Tでタブの有無を確認してもよいでしょう。

スポンサーリンク

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

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

コマンド例

実行結果

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

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

コマンド例

実行結果

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

コマンド例

実行結果

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

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

コマンド例

hello.c

実行結果

変換目的ならエディタの機能を利用してタブをスペースに変換したほうが都合がよいかもしれません。タブをスペースに変換するフィルタコマンドとしてならexpandコマンドのほうが良いかもしれません。

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

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

コマンド例

実行結果

参考

Gnu Coreutils

Gnu Coreutils日本語版