expandコマンドはタブをスペースに変換することができます。
タブをスペースに変換する際、タブストップ幅を考えて変換が行われます。タブを一定のスペースに変換するコマンドではないので注意が必要です。
目次
expandコマンドの前に
expandコマンドの行う前に、タブストップ(tab stop)について知らなければ、expandコマンドは意図した動作とは異なる動作に思えるかもしれません。
タブストップとは、テキストエディタの桁区切りのようなものです。
タブストップが「8」に設定されている場合、3文字が入力されている場合、タブを入力すると、8文字目までで止まるように表示されます(表示上では5つのスペースが開いているように見えます)。
タブストップについては、テキストエディタや文書作成ソフトで確認してみるとよいかもしれません。
expandコマンドとは
expandコマンドとは、タブをスペースに変換するコマンドです。
タブをどのくらいのスペースに変換するかはタブストップ幅で決定します。
また、タブをスペースに変換するプログラムの考え方については以下のページが参考になります。
外部リンク もう一度基礎からC言語 第41回 仕様設計からコーディングまで~タブ/スペース変換プログラムを作る(1) 仕様を考える
expandコマンドの利用例
タブストップ幅が8でスペースに変換
(オプションなし)
expandコマンドはデフォルトではタブストップ幅を8でタブをスペースに変換することができます。
コマンド例
1 |
expand tabfile.txt |
tabfile.txt
1 2 3 4 |
one one one two two two three three three four four four |
tabfile.txt(cat -ET版) ▼表示
実行結果
1 2 3 4 |
one one one two two two three three three four four four |
タブストップ幅を変更
(-tオプション)
-tオプションの後に数字を指定することで、タブストップ幅を変更することができます。
コマンド例
1 |
expand -t 16 tabfile.txt |
tabfile.txt
1 2 3 4 |
one one one two two two three three three four four four |
tabfile.txt(cat -ET版) ▼表示
実行結果
1 2 3 4 |
one one one two two two three three three four four four |
タブストップをリストで指定
(-tオプション)
-tオプションは、数字をリストで指定するとタブストップを可変にすることができます。
例えば、4,8でタブストップを指定した場合、3文字のものはタブストップを4で、7文字のものタブストップを8として処理します。
また、リストの最後のタブストップ以降は一つのスペースに置き換わります。
コマンド例
1 |
expand -t 4,8 tabfile.txt |
tabfile.txt
1 2 3 4 |
one one one two two two three three three four four four |
tabfile.txt(cat -ET版) ▼表示
実行結果
1 2 3 4 |
one one one two two two three three three four four four |
GNU拡張として、リストの最後のタブストップ以降のタブストップを指定することができます。
コマンド例
1 |
expand -t 4,8,/8 tabfile.txt |
実行結果
1 2 3 4 |
one one one two two two three three three four four four |
行頭のタブ文字のみをスペースに変換
(-iオプション)
-iオプションは行頭のすべてのタブ文字のみをスペースに変換することができます。
コマンド例
1 |
expand -i -t4 hello.c |
hello.c
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> int main(void){ str = "helloworld\n"; if(true){ printf(str); } return 0; } |
hello.c(cat -ET版) ▼表示
実行結果
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> int main(void){ str = "helloworld\n"; if(true){ printf(str); } return 0; } |
すべてのタブを一定のスペースに変換するには?
全てのタブを一定のスペースに変換するにはsedコマンド等を用いる事ができます。
コマンド例では、全てのタブを4つのスペースに変換しています。
コマンド例
1 |
sed $'s/\t/ /g' tabfile.txt |
実行結果
1 2 3 4 |
one one one two two two three three three four four four |
参考
外部リンクGnu Coreutils
外部リンクGnu Coreutils日本語版