coreutilsのマニュアルからpr
:
‘-e[in-tabchar[in-tabwidth]]’ ‘--expand-tabs[=in-tabchar[in-tabwidth]]’
入力時にタブをスペースに展開します。オプションのパラメーターin-tabcharは入力タブ文字です(デフォルトはTAB文字)。 2番目のオプションのパラメータin-tabwidthは、入力タブ文字の幅です(デフォルトは8)。
-e[in-tabchar[in-tabwidth]]
それぞれを複数のスペースに置き換えることを意味しますか?in-tabchar
in-tabwidth
以下の2つの例では、とが1つのスペースで区切られていますが、最初の例ではsumが3つのスペースで区切られ、2番目の例ではsumが2つのスペースで区切られているのはなぜa
ですか。ありがとうございます。b
c
1
3
$ printf "a:b:c\n1::3\n" | pr -t -e:2
a b c
1 3
$ printf "a:b:c\n1::3\n" | pr -t -e:1
a b c
1 3
答え1
pr -e
コマンドと同じことを行いますexpand
。通常、端末エミュレータと同様にタブを展開します。 TABは、カーソルを次のタブストップに移動させることによって端末が認識する制御文字であり、テーブルの書式設定およびソートに使用されます。
ほとんどの端末では、デフォルトで8列ごとにタップ停止が発生します。したがって、TABを送信することは、現在のカーソル位置に応じて1から8の間に複数のスペースを送信するのと同じ効果を持ちます。
$ printf '%b\n' 'a\tb' 'abcde\tg'
a b
abcde g
最初のタブはカーソルを右に7行移動し、2番目のタブは右に3行移動します。
pr -e
\t
同じ効果を得るために必要な数のスペースで置き換えます。
$ printf 'abcde\tg\n' | sed l
abcde\tg$
abcde g
$ printf 'abcde\tg\n' | pr -te | sed l
abcde g$
abcde g
GNU にはpr
GNU と同じ制限があります。expand
つまり、すべての文字が1バイトで構成され、表示のために1列を占めると仮定します。