拡張コマンドの理解

拡張コマンドの理解

-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 44文字ごとにタップ停止があります。

タブは固定数のスペースを挿入せずに次の位置に移動するため、追加されるスペースの数はタブの前のテキストの長さによって異なります。たとえば、

$ 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から番号を付け始めます。

おすすめ記事