\r\n\r\n
linuxfoldコマンドは制御不能な出力をもたらす。出力の幅を制御することで、大量のテキスト、エンドレス文字列、書式なしストリームを読み取ることができます。その方法をご紹介します。
Linuxの戦闘の最初のルール、それは敵を知ることです。定義しよう。1行のテキストとは一体何でしょうか?文字、数字、記号、スペースからなる一連の文字で、最後は「改行を開始する」という特殊なバイトで終わります。LinuxやUnixでは、行末を示す文字として改行(ニューライン文字とも呼ばれる)が使われます。16進数で0x0a、10進数で10の値を持つバイトである。
OSによって、行の終わりを示すバイトの値は異なりますが、Windowsは2バイトのシーケンスを使用します。Windowsのテキストファイルでは、改行文字の直後にキャリッジリターン文字(16進数で0x0d、10進数で13)が付きます。
改行」「復帰」という言葉は、タイプライターまでさかのぼることができる。紙を包むシリンダーであるプラテンは、取り外し可能なブラケットに取り付けられています。キーを押すたびに、キャリッジが1文字分左に移動します。新しい行を始めるには、レバーを押してペーパーキャリアを元の位置に戻し、シリンダーを回転させて紙の高さを1行分上に移動させるのです。この動作をキャリッジリターン、ローラーの回転(用紙の前進)をラインフィードと呼びます。
タイプライターの電源が入ると、レバーがキーに置き換わります。そのキーにはEnterまたはJust Enterと書かれていた。BBCマイクロなどの初期のコンピュータでは、現在キャリッジリターンキーと呼ばれているものに、まだリターンという名称が使われていた。
通常、改行は目に見えません。
改行がない、あるいは少ないテキストは、ターミナルのウィンドウでは幅が広すぎて読みにくい。それは困るが、それは可能だ。
さらに問題なのは、長蛇の列に対応するために、文字処理、送受信が必要なソフトウェアに問題が発生することです。これは、内部バッファの長さなど、ソフトウェアで調整できない部分が原因である可能性があります。
しかし、折り畳みという解決策があります。
本文の中で、とてもとても長い行がある部分を見てみましょう。ここでは文章の話をしているのではないことに注意してください。(このテキストはハーマン・メルヴィルの『モビーディック』からですが、両方やりました)。
1行のテキストは、最後の改行文字(ファイルの最初の行であればファイルの先頭)から次の改行文字まで、その間に何があっても実行されます。この行は多くの文章を含むことができます。端末のウィンドウを何周もすることがあります。とはいえ、一行の文章であることに変わりはない。
原文のまま見てみましょう。
less moby-dick.txtテキストは少ない形式で表示されます。
テキストはウィンドウの端から端まで伸び、行の折り返しは醜く、途中で言葉を区切っています。
で別バージョンのショートドキュメントを公開しています。
less short-lines-moby-dick.txtこのファイルの行はずっと短く、各行の終端は改行されています。
hextumpコマンドを使えば、ファイルのバイト値や改行を見ることができる。C(canonical)オプションは、16進数の値を表示の本体に、その横の列に相当するテキストを表示するように出力をフォーマットするものである。以下、出力を分割して説明します。
hexdump -C short-lines-moby-dick.txt | lessフォワードスラッシュ「/」を押すと、lessの検索機能にアクセスできます。0a "と入力し、Enterキーを押す。改行が強調表示されます。ファイルをスクロールして、どこに表示されるかを確認することができます。必要に応じて、左矢印キーと右矢印キーを使って出力を水平方向にスクロールさせることができます。
行末に改行があること自体が限界です。どのプログラムまたはウィンドウにこのテキストが表示されても、行の幅が行の幅より大きいウィンドウには収まらない。改行によって行の長さが制限されるようになりました。
つまり、長期的にも短期的にも問題があるわけです。
foldコマンドには-w(width)オプションがあり、テキストの最大幅を新たに指定することができます。Moby Dickのテキストを最大50文字幅で表示します。
fold -w 50 moby-dick.txtテキストは新しい最大ファイル長でターミナルウィンドウに表示されます。元のファイルは変更されません。foldの出力だけが再フォーマットされます。
一見すると、こちらの方がずっと良さそうです。しかし、行末の単語は途中で区切られたままです。明らかに読みやすくなっていますが、難しい言葉の切れ目が耳障りなところもあります。
右側の余白が前後に振動しているように見えるが、すべての行の長さは同じである。他の文字より1文字短いように見える行は、スペース文字で正確に終了します。
s(スペース)オプションを使って、スペース文字だけが行で分割され、単語が行の間で分割されないようにすることができます。
fold -w 50 -s moby-dick.txt出力は右に不均等になりましたが、読みやすくなりました。すべての単語は行頭から始まります。
長い行を短くするだけでなく、短い行から強制的に行長を削除することもfoldで可能です。
fold -w 75 short-lines-moby-dick.txt改行は削除され、テキストは割り当てられた最大長より前に改行されるようになりました。
元のファイルを修正することはできません。変更を維持したい場合は、foldの出力を新しいファイルにリダイレクトする必要があります。出力を "modified moby" - Dick.txtというファイルにリダイレクトすることにします。"
fold -w 75 -s short-lines-moby-dick.txt > modified-moby-dick.txtそれでは、新しいドキュメントを見てみましょう。
less modified-moby-dick.txt新しいアーカイブはいかがでしょうか。
テキストは、元の文書の行長よりも広い新しい行幅で、きれいに折り返されます。
テキストストリームを再フォーマットするために、foldingを使用することができます。ファイルの処理に限定されるものではありません。journalctl ツールの生の出力がどのようなものか見てみましょう。 f (follow) オプションは systemd ログの最新のエントリを表示し、新しいエントリが到着するとそれを更新します。
sudo journalctl -f出力はターミナルウィンドウの端に回り込みます。
見た目はそれほど悪くありませんが、デモのために幅を少し狭めてみましょう。journalctlの出力をfoldにインポートします。最大幅を65文字に設定し、スペースでのみ改行するようにします。
sudo journalctl -f | fold -w 65 -sディスプレイの圧迫感がなくなり、手触りもすっきりしました。
純粋なテキストの壁は、突き通すことができないように見えます。対処するのが難しいのです。木を見て森を見ずというような時は、折りを見て、ちょっとした秩序を課してください。