ウェブサイト検索

Linuxでfoldコマンドを使用する方法


Linuxのfoldコマンドは、乱れた出力を制御します。出力の幅をコントロールすることで、広いテキストの塊や、終わりのない文字列、フォーマットされていないストリームを読みます。使い方を学びましょう。

Linuxターミナルにおけるテキストの行の動作

Linux戦闘の第一規則:敵を知ること。では、それを定義しましょう。一体何がテキストの行なのか?それは、文字、数字、記号、ホワイトスペースからなる一連の文字であり、"新しい行を開始する"という意味を持つ特別なバイトで終わるものです。LinuxとUnixでは、改行文字、別名ラインフィードが行の終わりの指示子として使用されます。これは、16進数で0x0a、10進数で10の値を持つバイトです。

異なるオペレーティングシステムは、行の終わりを示すために異なるバイト値を使用します。Windowsは2バイトのシーケンスを使用します。Windowsのテキストファイルでは、改行文字の後にキャリッジリターン文字が続き、これは16進数では0x0d、10進数では13です。

「改行」と「キャリッジリターン」という用語は、タイプライターに由来します。プラテンとは、紙が巻かれていたシリンダーで、可動式のキャリッジに取り付けられていました。キャリッジはキーを押すたびに1文字分左に移動しました。新しい行を始めるには、キャリッジを元の位置に戻し、ローラーを回して紙を1行分上に移動させるレバーを押しました。この動作はキャリッジリターンと呼ばれ、シリンダーの回転(および紙の進行)は改行と呼ばれていました。

タイプライターが電動化されたとき、レバーはキーに置き換えられました。そのキーにはキャリッジリターンまたは単にリターンとラベルが付けられていました。BBCマイクロなどの初期のコンピュータは、まだその名前を使用していました。

Return

現在私たちがEnterキーと呼んでいるものについて。

一般的に、改行文字は見ることができません。それらの効果だけを見ることができます。改行文字は、テキストを表示または処理するソフトウェアに新しい行を始めさせるものです。

しかし、長い列の何が問題なのか?

改行文字がほとんどないテキストは、ターミナルウィンドウで快適に読むには幅が広すぎます。それは面倒ですが、可能です。

より厄介な問題は、処理、送信、または受信する必要があるテキストに対して、問題を引き起こすような長さの行に対処する必要があることです。これは内部バッファの長さや、調整できないソフトウェアの他の側面が原因である可能性があります。

しかし、それを解決する方法があります。それはfoldと呼ばれています。

フォールドの第一歩

非常に非常に長い行が含まれているテキストの一部を見てみましょう。ここで話しているのは文ではないことに注意してください。(テキストはハーマン・メルビルの『白鯨』から来ているので、最高の両方の世界が手に入っています。)

テキストの1行とは、最後の改行文字(またはファイルの最初の行の場合はファイルの先頭)から次の改行文字までのすべてです。間に何があっても関係ありません。1行には多くの文が含まれることがあります。また、ターミナルウィンドウ内で何回も折り返すことがありますが、それでも1つのテキスト行です。

生の形でそのテキストを見てみましょう:

less moby-dick.txt

テキストは less に表示されます:

テキストはウィンドウの片側からもう片側まで伸びており、改行は見栄えが悪く、単語の真ん中で切れてしまいます。

短い行のファイルの別のバージョンがあります:

less short-lines-moby-dick.txt

このファイルの行はずっと短いです。各行は改行文字で終了しています。

もし私たちがhexdumpコマンドを使用すれば、ファイル内のバイト値を確認し、改行文字を見ることができます。-C(標準)オプションは、出力をフォーマットして、表示の主要部分に16進数の値を、横の列にテキストの等価物を示します。出力をlessにパイプします:

hexdump -C short-lines-moby-dick.txt | less

スラッシュ「/」を押すことで、lessの検索機能に入ります。「0a」と入力して、Enterを押してください。テキスト内の改行文字が強調表示されます。ファイルをスクロールして、どこに現れるかを確認できます。必要に応じて、Left ArrowキーとRight Arrowキーを使用して、出力を横にスクロールできます。

各行の末尾に改行文字があることは、それ自体が制限となる可能性があります。このテキストを表示するプログラムやウィンドウに関係なく、行は自分自身よりも幅が広いウィンドウには適応できません。行の長さは改行文字によって制限されています。

長い列と短い列の両方に問題があります。

長い列を減らす

コマンドfoldには、テキストのセクションの新しい最大幅を指定できるオプション-w(幅)があります。最大50文字の幅でMoby Dickのテキストを表示します:

fold -w 50 moby-dick.txt

テキストはターミナルウィンドウに表示され、新しい最大ファイル長が示されます。元のファイルは変更されません。再フォーマットされるのは fold の出力のみです。

一見すると、これはずっと良く見えます。しかし、言葉はまだ行の端で真ん中で分割されています。確かに読みやすくなっていますが、いくつかの不自然な単語の切れ方が目を引きます。

テキストの右側の余白が揺れているように見えますが、すべての行の長さは同じです。他の行よりも1文字短く見える行は、たまたまスペース文字で終わっています。

スペースで行を分割する

私たちは、行がスペース文字のみに分割され、単語が2行にまたがって壊れないことを確実にするために、-s(スペース)オプションを使用できます。

fold -w 50 -s moby-dick.txt

出力は現在、右側の余白が不揃いですが、読みやすくなっています。すべての単語は始まった行で終わっています。

短い線を長くする

長い行を短くするだけでなく、foldを使って短い行の強制された行の長さを取り除くこともできます。

fold -w 75 short-lines-moby-dick.txt

改行文字が削除され、テキストは与えられた最大長の前またはその上で折り返されるようになりました。

変化を永続的にする

fold は元のファイルを変更することはできません。変更を保存したい場合は、fold の出力を新しいファイルにリダイレクトする必要があります。出力を「modified-moby-dick.txt」というファイルにリダイレクトします。

fold -w 75 -s short-lines-moby-dick.txt > modified-moby-dick.txt

新しいファイルを見てみましょう:

less modified-moby-dick.txt

私たちの新しいファイルはどうですか?

テキストは現在、新しい行の幅で見栄えよく折り返されており、これは元のファイルの行の長さよりも広いです。

ストリームを使用してフォールドする

私たちはfoldを使ってテキストのストリームの形式を変更することができます。それはファイルだけでなく、他の用途にも使用できます。journalctlツールの生の出力がどのように見えるかを見てみましょう。-f(フォロー)オプションは、systemdジャーナルの最新のエントリを表示し、新しいエントリが届くと更新されます。

sudo journalctl -f

出力はターミナルウィンドウの端で折り返されます。

あまり悪くは見えませんが、デモのために幅を少し狭くしましょう。journalctlの出力をfoldにパイプします。最大幅を65文字に設定し、行はスペースのみに基づいて折り返します。

sudo journalctl -f | fold -w 65 -s

ディスプレイは少し圧倒的でなくなり、少し整然として見えます。


固いテキストの壁は侵入不可能に思えることがあります。それらは魅力がなく、対処するのが疲れるものです。木の中から森を見る必要があるときは、foldを呼び出して少しの秩序を強制しましょう。

Linuxコマンド

ファイル

t

プロセス

A

ネットワーキング

netstat
ping
traceroute
ip
ss
whois
fail2ban
bmon
dig
finger
nmap
ftp
curl
wget
who
whoami
w
iptables
ssh-keygen
ufw
arping
firewalld

関連: 開発者と愛好者のための最高のLinuxノートパソコン

関連記事: