-t
コマンドの引数がどのように機能するかはよくわかりませんexpand
。以下は、そのマンページから抜粋したものです。
NAME
expand - convert tabs to spaces
...
-t, --tabs=N
have tabs N characters apart, not 8
それは何をしますか?N文字で区切られたタブ意味は?いくつかのテストをしてみました。
root@u2004:~# printf "a\tb\n"
a b
root@u2004:~# printf "a\tb\n" | od -a
0000000 a ht b nl
0000004
root@u2004:~# printf "a\tb\n" | expand | od -a
0000000 a sp sp sp sp sp sp sp b nl
0000012
root@u2004:~# printf "a\tb\n" | expand -t 4 | od -a
0000000 a sp sp sp b nl
0000006
root@u2004:~# printf "a\tb\n" | expand -t 5 | od -a
0000000 a sp sp sp sp b nl
0000007
root@u2004:~#
ご覧のとおり、渡すと-t 4
タブ文字が3つのスペースに置き換えられます。それでは、実際に「4文字で区切られたタブ」は、タブが3つの空白に置き換えられるという意味でしょうか?私は理解できません。しかし、私は英語が母国語ではありません。これは英語関連の問題かもしれません。
答え1
ラベルを指す止める、タブが移動する位置です。の場合、-t 4
4文字ごとにタップ停止があります。
タブは固定数のスペースを挿入せずに次の位置に移動するため、追加されるスペースの数はタブの前のテキストの長さによって異なります。たとえば、
$ printf "1\tx\n" | expand -t 4 | od -a
0000000 1 sp sp sp x nl
0000006
$ printf "123\tx\n" | expand -t 4 | od -a
0000000 1 2 3 sp x nl
0000006
もちろん、ポイントは列をソートすることです。
$ printf "123\tx\n1\tx\n" |expand -t4
123 x
1 x
したがって、これを視覚的に表現するために、タップ停止位置は次の^
ように表示されます。
123412341234...
^ ^ ^
(もちろん、一番最初にタップすることはできないので、最初のタブは実際には存在しません。)
しかし、フィールドがタップ停止距離より長い場合、状況は複雑になりますが、代わりexpand
に列位置のリストが必要です。たとえば、4つの幅の列と8つの幅の列があります。
$ printf "%b\n" 'A\t1234567\thello' 'B\t987\tworld' |expand -t4,12
A 1234567 hello
B 987 world
そこにあるサイトは次のとおりです。
11111111112
012345678901234567890...
A 1234567 hello
B 987 world
^ ^
位置がコマンドラインで指定された番号と一致するように0から番号を付け始めます。