単位区切り記号ASCII文字(ASCII 31、8進数37)はVimから^_
。これにより、行のフィールドが互いにくっつきます。
# In Vim and less:
first field^_second field^_last field
# cat the same file to terminal:
cat delim.txt
first fieldsecond fieldlast field
# print 2nd field with awk
cat delim.txt | awk 'BEGIN {FS = "\037"} {print $2}'
second field
単位区切り記号を表示するには、cat -vを使用できると思います。
cat -v delim.txt
first field^_second field^_last field
ところがこれがもっと問題だ。 Bashシェルからstdoutとして印刷するときに単位区切り記号に目に見える表現がないのはなぜですか?シェル出力を正しくコピーして貼り付けることもできません。単位区切り記号がプロセスから失われます。
ベストアンサー1
US
とも呼ばれる単位区切り文字()文字は文字クラスにIS1
属し、次のようになります。cntrl
いいえprint
キャラクタークラスです。テキストをグループ化するために使用される制御文字であり、この情報を活用するように設計されたプログラムの場合。通常、印刷できない文字は、プログラムや環境によって異なるように解釈されレンダリングされることがあります。
Vimで表示される理由は、^_
Vimがインタラクティブエディタであるためです。正しいバイナリ文字がディスクに書き込まれる限り、印刷できない文字を自由にレンダリングできます。
Unixシェルプログラムはプレーンテキストを操作し、プレーンテキストを互いに渡すように書かれているため、シェルは同じ動作を取得できません。ファイルを生成するときにcat
端末に書き込まれるテキストは、ファイルの実際の内容でなければなりません。
これは、文字の解釈を最終デバイスに任せます。一部の端末エミュレータはするUS
他のキャラクターと差別化されたキャラクターを作ってみてください。 (gnome-terminal
またはvte
それに基づくすべての端末)文字は、16進コードを含むボックスとしてレンダリングされます001F
。xterm
または ではrxvt
文字が実際には見えません。