fmt 文章を指定した幅に整形する
fmt [オプション] [ファイル...]試してみる
fmt memo.txt既定の幅(75桁以内)で、改行を整えます。段落は空行で区切られたまま残ります。
fmt -w 40 memo.txt-w で、1行の最大幅を40桁にします。
printf 'a b\nc d\n' | fmt -s-s を付けると、短い行をつなげません。付けないと a b c d の1行になります。
fmt -w 30 -u memo.txt | head -n 4-u で、単語の間隔を1つの空白に統一します。
printf '# one two three four\n# five six seven\nplain text\nmore text\n' | fmt -w 20 -p '#'-p は、指定した文字列で始まる行だけを整形します。# の行だけ折り返され、ほかはそのままです。
echo "one two three four five six" | fmt -w 12標準入力も整形できます。
主なオプション
-w 幅 | 1行の最大の幅を指定する(既定は75) |
|---|---|
-s | 長い行を分割するだけにして、短い行はつなげない |
-u | 単語の間を1つの空白にする |
-p 接頭辞 | 指定した文字列で始まる行だけを整形する |
-t | 段落の最初の行だけ、2行目以降と字下げを変える |
解説
基本
fmt は、テキストの段落を読み、指定した幅に収まるように改行し直します。短い行はつなげ、長い行は折り返します。メールの本文や README の文章を整えるときに使います。
段落の判定
空行が、段落の区切りです。段落をまたいだ結合はしません。段落内の字下げは、保たれます。
幅の既定値
-w の既定は75桁です。実際には、その93%ほどを目標(-g)にして折り返すので、行の長さは、指定した幅より少し短めになります。
日本語について
fmt は、単語を空白で区切る英語のような文章向けです。日本語には空白がないので、うまく折り返せません。日本語の長い行は、折り返しのほか、fold などを使うことになりますが、これも文字の途中で切ることがあります。
似たコマンド
fold は、単語を気にせず、指定した幅で機械的に折り返します。fmt は、単語の途中では折り返しません。