expand タブを空白に変換する
expand [オプション] [ファイル...]試してみる
cat -A table.tsvまず、元のファイルのタブ(^I)を確認します。
expand table.tsvタブを空白に変換します。8桁ごとのタブ位置に合わせた空白になります。
expand -t 12 table.tsv-t でタブ位置の間隔を変えます。12桁ごとにそろいます。
expand -t 4,10,16 table.tsvカンマで区切ると、タブ位置を個別に指定できます。
expand -t 2 code.txt | cat -A行頭のタブを、2桁分の空白に変換します。
printf 'a b\n' | unexpand -a | cat -Aunexpand は逆に、空白をタブへ戻します。a と b の間の7つの空白が、タブ1つになります。
主なオプション
-t 数 | タブ位置の間隔(既定は8)。カンマ区切りで位置を個別に指定できる |
|---|---|
-i | 行頭のタブだけを変換する |
解説
基本
expand は、タブ文字を、同じ見た目になる空白に変換します。タブの見た目は、環境によって違います。空白にすれば、どこで開いても桁がそろいます。
タブは固定の幅ではない
タブは「次のタブ位置まで進める」文字です。既定のタブ位置は、8桁ごとです。そのため、name のあとのタブは、4つの空白になるといったように、文字数に応じて空白の数が変わります。-t でタブ位置の間隔を変えられます。
行頭だけを変える
-i を付けると、行頭のタブだけが対象になります。コードのインデントだけを空白に変えて、行の途中のタブは残したいときに使います。
逆の操作
空白をタブに戻すコマンドは unexpand です。既定では行頭の空白だけを変換し、-a を付けると、すべての空白が対象になります。
tr との違い
tr '\t' ' ' は、タブ1つを空白1つにします。桁はそろいません。expand は、桁がそろうように、必要な数の空白にします。