Linux / コマンド / fmt - 一般テキスト段落の改行調整

fmtは、通常のテキスト段落の行の長さを読みやすい形に整えて出力します。行がバラバラなメモや下書きを整理する際に使用できます。

段落を再配置するツールなので、意味のある行区切りがあるソースコード、CSV、Markdown表やログには適していません。元のファイルは基本的に変更せず、調整されたテキストを出力します。

基本的な文法

fmt [オプション] [ファイル ...]

インストールされている実装とオプションは、配布版によって異なる場合があります。man fmtで現在のシステムの説明を確認してください。

使用例

基本的な段落整形

読み取り可能な notes.txt を用意します。段落内の短い行を結合したり長い行を折り返したりして、読みやすい幅に整えます。

fmt notes.txt

行幅を指定する

読み取り可能な draft.txt を、幅60を上限の目安に整えます。ただし、それより長い単語を途中で切らないため、長いURLなどが幅を超えて残る場合があります。

fmt -w 60 draft.txt

結果を別ファイルに保存する

元のファイルを保持して、結果を別名で保存します。draft-formatted.txt が既にあれば上書きされるので、未使用の名前かを確認してください。入力と同じ名前へのリダイレクトは、読み取り前に元ファイルを空にするため避けます。

fmt -w 72 draft.txt > draft-formatted.txt

段落を折り返した結果を理解する

fmtは単純に指定幅で切るのではなく、段落内の単語の間を再配置します。以下の例は、長い1行を幅20字前後の複数行にします。

printf 'one two three four five six\n' | fmt -w 20

例の出力(単語の配置は実装やオプションによって変わる場合があります):

one two three four
five six

fmt は単語を途中で切って指定幅を守るツールではありません。既存の改行を結合せず、長い行を指定幅で折り返したい場合は foldによる行の折り返し を使い分けます。コードや表のように改行・空白に意味があるデータには、段落の整形を適用しない方が適切です。

主なオプションと形式

オプション・形式 説明
-w N 行幅の上限の目安をNにします。目標幅を指定する -g とは異なります。
-s 短い行は結合せず、長い行だけを分割します。
-u 単語間を1スペース、文間を2スペースに揃えます。
-p 接頭辞 指定した接頭辞がある行のみを対象とします。

使用する際の注意点

fmtは書式の意味を理解していないため、リストのインデント、コードブロック、引用文があるドキュメントは結果を確認する必要があります。文字幅が画面に表示される幅と異なる場合があるため、日本語や全角文字は使用する実装・ロケールで結果を確認し、表示幅や自然な禁則処理が保証されるとは考えないでください。

よくある質問

fmtは元のファイルを修正しますか?

いいえ。基本的には結果を標準出力に出力します。別のファイルに保存してから確認してください。

公式ドキュメント

オプションの正確な動作や実装ごとの差異はfmtに関する公式ドキュメントで確認できます。