Linux / コマンド / fold - 長い行を指定した幅に分割する

foldは、入力の長い行を指定した幅で複数行に折り返して出力します。段落を自然に再編集するfmtとは異なり、行の表示幅を制限することに焦点を当てています。

デフォルトは画面上の幅80列です。通常の半角英数字なら1文字が1列ですが、タブなどは同じ数え方になりません。-sを使うと、可能であれば単語の間の空白で行を分けます。元の改行は保持され、結果だけが標準出力に出力されます。

基本的な文法

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

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

使用例

基本幅で折り返す

読み取り可能な long-lines.txt を用意し、長い行を標準の幅80列で折り返します。

fold long-lines.txt

幅を60に指定

端末や文書の幅に合わせて出力します。

fold -w 60 long-lines.txt

単語境界を優先

読み取り可能な paragraph.txt を用意します。幅の上限に達する前の空白で折り返しますが、その範囲に空白がなければ単語の途中でも切れます。

fold -s -w 60 paragraph.txt

固定幅で分割して出力を表示

fold -w 4は行を指定した幅で折り返します。以下の文字列は空白がないため、ASCIIの4文字ごとに新しい行が作られます。

printf 'abcdefghij\n' | fold -w 4

例の出力:

abcd
efgh
ij

単語をできるだけ切らないようにするには、-sオプションを検討してください。ただし、foldは段落を自然に再配置するfmtとは異なります。GNU版のタブは通常、次のタブ位置までの列数として数えます。-b はタブも1バイトとして数えるため、同じ -w でも折り返す位置が変わります。

主なオプションと形式

オプション・形式 説明
-w N 出力行の最大幅を指定します。
-s 可能であれば空白の位置で改行します。
-b 画面列ではなくバイト数を基準に幅を数えます。

使用する際の注意点

-bはUTF-8文字の途中で分割する可能性があるため、多言語テキストで安易に使用しないでください。GNU版ではCoreutils 9.8からマルチバイト文字の表示幅に対応しました。古い版は通常モードでもUTF-8の途中で切る場合があるため、fold --version とロケールを確認し、実際の日本語入力で結果を確認します。対応版でも、端末の絵文字表示や日本語の禁則処理まで保証されるわけではありません。データの元の行が意味を持つ場合は、折り返した結果を再びデータ入力として使用しないほうが安全です。

よくある質問

foldとfmtはどう違うのですか?

fold は既存の改行を保ちながら長い行を折り返します。fmtによる段落の整形 は、短い行の結合も含めて段落内の改行を組み直します。

公式ドキュメント

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