
拡張されていないドキュメントを読み、答えを読んでみました。ここしかし、unexpandがtablistをパラメータとして使用する方法を理解していません。
次のことを試みると(2つのスペースと3つのスペースがタブに変換されると予想されます)
$ unexpand -t 2,3,4
12**345***678
わかりました。
12\t\t345***678
*
スペースを表します(*
明確にするためにこれを使用します)。空白が3つあるのに、なぜ2の後ろにはタブが2つあり、5の後にはタブがないのかわかりません。
また、次のことを試みました(2番目と5番目の列のスペースがタブに変換されると予想されます)。
$ unexpand -t 2,5
1*23*4567
わかりました。
1*23*4567
私も試しました
$ unexpand -t 2,5
1**2*****345
わかりました。
1\t*2*****345
複数のパラメーターがある場合、プログラムがtablistパラメーターをどのように解釈するかを理解できません。
答え1
unexpand
その逆にしてくださいexpand
。これにより、unexpand -t 2,3,4 | expand -t 2,3,4
元の場所に戻らなければなりません。
この数字は、タブ間の距離ではなく、位置(画面の左側からの距離)を表します。
最初のタップストップをオフセット2(3番目の列)に設定-t 2,3,4
し、2番目のタップストップをオフセット3に、3番目のタップストップをオフセット4に設定すると、すべてです。
↓↓↓
0123456
$ printf '%b|\n' '\t' '\t\t' '\t\t\t' | expand -t2,3,4
|
|
|
1、2、3 タブは次の位置にあります。
123
これを次のように組み合わせると:
123
12**345***678
3
3番目のタブストップにあるので、そこ2
に行くには2つのタブが必要です。最初のタブは2番目のタブストップに移動し(すでに最初のタブストップに達したため)、2番目のタブは2番目のタブストップに移動します。 3番目のタブ停止。それ以降はタブがないため、スペースはタブに変換されません。
2番目のタブ停止が2番目のタブ停止の後の3列になり、3番目のタブ停止が2番目のタブ停止の後の4列になるようにするには、次のものが必要です-t 2,5,9
。
↓ ↓ ↓
0123456789
$ printf '\t1\t2\t3\n' | expand -t 2,5,9
1 2 3
これにより、次のようになります。
↓ ↓ ↓
01234567890
$ echo '12 345 678' | unexpand -t 2,5,9 | sed -n l
12 345\t 678$
un
expand
()とtabs
(サポートする端末にタブを設定するコマンド)の違いに注意してください。
- の場合、
tabs
列はゼロではなく1から始まり、番号が付けられます。 tabs -8
(代わりに)8列ごとにタブストップ設定を使用しますexpand -t 8
(実際にはこれと似ていますtabs 9 17 25 33...
が、それも使用できますtabs 9 +8 +8 +8...
)。