Linuxの
fold
コマンドは手に負えない出力をもたらします。出力の幅を制御することで、幅広いテキストの塊、無限の文字列、およびフォーマットされていないストリームを読み取ります。方法を学びます。
Linux ターミナルでのテキスト行の仕組み
Linux 戦闘の第一のルール: 敵を知ること。それでは、それを定義しましょう。テキスト行とは正確には何ですか?これは文字、数字、記号、空白などの一連の文字であり、「新しい行の開始」を意味する特別なバイトで終了します。 Linux および Unix では、 改行文字 (ラインフィードとも呼ばれます) は行末インジケータとして使用されます。これは、 16 進数 で 0x0a、10 進数で 10 の値を持つバイトです。
オペレーティング システムが異なれば、行の終わりを示すために使用するバイト値も異なります。 Windows では 2 バイト シーケンスが使用されます。 Windows テキスト ファイルでは、改行文字の直後に 復帰文字 (16 進数では 0x0d、10 進数では 13) が続きます。
「ラインフィード」と「キャリッジリターン」という用語は 、タイプライターに まで遡ります。プラテン、 つまり紙が巻き付けられるシリンダーは 、可動キャリッジに取り付けられていました。キーを押すたびに、キャリッジが 1 文字分左に移動します。新しい行を開始するには、レバーを押すとキャリッジが元の位置に戻り、ローラーが回転して用紙が 1 行の高さだけ上に移動します。この動作はキャリッジリターンとして知られ、シリンダーの回転 (および紙の送り) はラインフィードとして知られていました。
タイプライターが電気化されると、レバーは鍵に置き換えられました。キーには Carriage Return または単に Return というラベルが付けられていました。 BBC Micro などの初期のコンピューターではまだこの名前が使用されていました。
Return
現在
Enter
キーと呼ばれるものです。
原則として、改行文字は表示されません。それらの効果を確認することしかできません。改行文字は、テキストを表示または処理するソフトウェアに強制的に新しい行を開始させます。
しかし、長い行列には何が問題なのでしょうか?
改行文字がまったく含まれていない、またはほとんど含まれていないテキストは、幅が広すぎて端末ウィンドウで快適に読むことができません。それは面倒ですが、実行可能です。
さらに有害な問題は、テキストを処理、送信、または受信する必要があるソフトウェアに問題を引き起こすほどの長さの行を処理しなければならないことです。これは、内部バッファの長さ、または調整できないソフトウェアのその他の側面が原因である可能性があります。
しかし、それを修正する方法があり、
fold
と呼ばれます。
フォールドの最初のステップ
非常に長い行が含まれるテキストの一部を見てみましょう。ここでは文について話しているわけではないことに注意してください。 (ただし、テキストはハーマン メルヴィルの『白鯨』から引用しているので、両方の長所を取り入れています。)
テキスト行とは、間に何があるかに関係なく、最後の改行文字 (ファイルの最初の行の場合はファイルの先頭) から次の改行文字までのすべてを指します。行には多くの文が含まれる場合があります。端末ウィンドウ内で何度も折り返される可能性があります。しかし、それはまだ一行のテキストです。
テキストをそのままの形式で見てみましょう。
moby-dick.txt を減らす
テキストは
less
で表示されます:
テキストはウィンドウの一方の端からもう一方の端まで伸びており、行の折り返しは見苦しく、途中で単語が途切れてしまいます。
短い行を含む別のバージョンのファイルがあります。
短い行を減らす-moby-dick.txt
このファイルの行ははるかに短いです。各行は改行文字で終了します。
hexdump
コマンドを使用すると、
ファイル内のバイト値を調べ
て改行文字を確認できます。
-C
(標準) オプションは、表示の本体に 16 進値を表示し、その横の列に同等のテキストを表示するように出力をフォーマットします。出力を
less
にパイプします。
hexdump -C short-lines-moby-dick.txt |少ない
スラッシュ「
/
」を押すと、
less
の検索機能に入ります。 「0a」と入力して
Enter
押します。テキスト内で改行文字が強調表示されます。ファイルをスクロールして、それらがどこに表示されるかを確認できます。必要に応じて、
Left Arrow
と
Right Arrow
キーを使用して出力を横にスクロールできます。
各行の末尾に改行文字があること自体が制限となる場合があります。どのようなプログラムやウィンドウがこのテキストを表示するとしても、行は行自体よりも幅の広いウィンドウに適応することはできません。行の長さは改行文字によって制限されています。
したがって、長い行にも短い行にも同様に問題があります。
長い行列を減らす
fold
コマンドには、テキストのセクションの新しい最大幅を指定できるオプション
-w
(幅) があります。白鯨のテキストを最大 50 文字の幅で表示します。
折りたたむ -w 50 moby-dick.txt
テキストが新しい最大ファイル長で端末ウィンドウに表示されます。元のファイルは変更されません。再フォーマットされるのは、
fold
からの出力のみです。
一見すると、これはかなり良く見えます。しかし、依然として行末の真ん中で単語が分割されてしまいます。確かに読みやすくなりましたが、単語の区切りがぎこちなくて不快に感じます。
テキストの右側の余白が揺れているように見えますが、行の長さはすべて同じです。残りの行より 1 文字短いように見える行は、たまたまスペース文字で終わっています。
スペースでの線の分割
-s
(スペース) オプションを使用すると、スペース文字でのみ行が分割され、単語が 2 行にまたがらないようにすることができます。
折りたたむ -w 50 -s moby-dick.txt
出力の右側のマージンが不揃いになりますが、読みやすくなりました。すべての単語は、開始した行で終了します。
短い行を長くする
長い線を短くするだけでなく、
fold
を使用して、短い線の強制的な線の長さを削除することもできます。
フォールド -w 75 ショートライン-moby-dick.txt
改行文字は削除され、テキストは割り当てられた最大長以下で折り返されます。
変更を永続化する
fold
元のファイルを変更できません。変更を保持したい場合は、
fold
からの出力を新しいファイルにリダイレクトする必要があります。出力を「modified-moby-dick.txt」というファイルにリダイレクトします。
折りたたむ -w 75 -s short-lines-moby-dick.txt >modified-moby-dick.txt
新しいファイルを見てみましょう。
修正が少ない-moby-dick.txt
新しいファイルはどのように見えるでしょうか?
テキストは、元のファイルの行の長さよりも広い新しい行幅できれいに折り返されます。
ストリームでのフォールドの使用
fold
を使用してテキストのストリームを再フォーマットできます。ファイルの操作のみに限定されるわけではありません。
journalctl
ツールからの生の出力がどのようなものかを見てみましょう。
-f
(follow) オプションは、
systemd
ジャーナル内の最新のエントリーを表示し
、新しいエントリーが到着すると更新します
。
sudoジャーナルctl -f
出力は端末ウィンドウの端で折り返されます。
見た目はそれほど悪くありませんが、デモンストレーションのために、幅を少し狭めてみましょう。出力を
journalctl
から
fold
にパイプして渡します。最大幅を 65 文字に設定し、スペースでのみ改行します。
sudoジャーナルctl -f |折りたたむ -w 65 -s
ディスプレイは少し圧迫感がなくなり、見た目もすっきりしました。
ソリッドテキストの壁は突破できないように見えるかもしれません。彼らは不快で、対処するのに疲れ果てています。木から森を見る必要があるときは、
fold
を呼び出して、少し秩序を課してください。
関連: 開発者と愛好家のための最高の Linux ラップトップ





