長い文字列に改行を挿入するコマンドラインツールはありますか?


18

限られたテキスト幅で表示する必要のある長い文字列が与えられた場合、各行が特定のテキスト幅以下の単一行の文字列を複数行の文字列に変換する* nixのコマンドラインツールはありますか?

たとえば、次の文字列が与えられた場合

$ MYSTRING="Call me Ishmael. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world."

私はこのような形式にしたいと思います:

$ echo $MYSTRING | special-format-command --width=30
Call me Ishmael. Some years ag
o - never mind how long precis
ely - having little or no mone
y in my purse, and nothing par
ticular to interest me on shor
e, I thought I would sail abou
t a little and see the watery 
part of the world.

回答:


24

fold次のコマンドを試すことができます。

echo "$MYSTRING" | fold -w 30

2
1、おそらくより良いと書かれecho $MYSTRING | fold -w 30ているので、-30構文は表示されません倍マニュアルページ
ire_and_curses

5
後世のために、もありますfmt。差foldとは、fmtすなわちfold、一定の幅であっても分割単語をラップし、ブランクを含む行を開始してもよいです。一方でfmt近くや幅の下に折り返されます、それはスプリット言葉は、行が空白で始まっていますしませんし、短い線を接合してもよいです。
バハマ

5
foldオプションを使用したfmt場合と同様の動作をするよう-sです。
コリークライン

おかしい、私は-wオプションを使用しましたが、charで分割しました。
両生類

6

以下が使用するメソッドsedです:

sed 's/.\{30\}/&\
/g'

しかし、それはどういう意味ですか?
リチャード

1
@Richard改行(.\{30\})を除くすべての文字の30 を、同じ文字列(&)で置き換え、その後に改行を続けます。
クリスダウン

6

fmt(GNU coreutilsの一部、およびIIRCの他のバージョンは非GNU * nixesに含まれていたため、すでにインストールされていることはほぼ確実です)の全体的な目的は、段落を再フォーマットすることです。

ただし、par(段落再構成用)と呼ばれるさらに優れたツールがあります。できることはすべて実行fmtできますが、正確な出力形式を制御するためのオプションがさらに多くあります。

本当に素晴らしいことの1つは、par電子メールでの引用の処理が非常に賢いことです(複数レベルの引用も)-非常に便利です... F5を押すと現在の段落がparを送信するように.vimrcを設定しています。

ディストリビューション用にパッケージ化されていない場合(debianおよびデリバティブ用、おそらく他のもの用)、parはhttp://www.nicemice.net/par/にあります。


「非GNU * nixes」とは、「本当の」(「Unixのような」ではない)Unixを意味しますか?(それ以外の場合はクールなツールのようです。)
エマニュエルベルク

私は今では廃止された独自のジャンク* nixesを意味します。
cas

それは私が考えていたことですが、なぜあなたはアスタリスクを使用していますか?それは、常に「Unixライク」と入力しなければならないことを回避することだと思いました(Linuxなどの場合)。(私はあなたに詳細を盗聴していません-まあ、私は-私は本当に知りたいです、私はそれのためにあなたを盗聴していません。)
エマニュエルベルク

*nix「一般的なUNIXまたはUNIXをライクなシステム」と言うのだけの方法である-それは言葉UnixはAT&Tの独自のトレードマークだった時からさかのぼる
CAS

3

fold -s あなたの質問に対する最短のベストアンサーです。

ただし、場合によっては、これらの専用ツールと同じくらい良い場合もありますが、一般的には、エディターにこれを行わせる必要があります。

Emacsでは、とにかくこれを微調整できます。私に関しては、一般的な場合、段落の終わり以外の場所で改行をしたくないため、(モード行にマイナーモードvisual-line-modeとして表示されます)を使用Wrapします。

自分のやり方を伝えたいと思った。それは「その」方法ではありませんが、1つの方法です。関数と変数について述べたように、あなたの方法はそれらをまとめて自動化してあなたのために機能させることです。(これはEmacsですが、十分に高度なエディターであれば、同様の投稿を書くことができます。)

入力時に視覚的に折り返された行があり、手動で改行しないでください。いつものように、例外があります。たとえば、GNUSはUsenetに特定の幅(文字数)を超える行で投稿を送信しません。だから、私は使用しますM-q。EmacsではM-q、コマンドを実行しfill-paragraphます。変数fill-columnは塗りつぶしの幅を制御します。例として、これを(1行で)書くと

This is a lot of text being written right now. The purpose is to overflow the line so I have have to line break it with M-q.

そして、Mqを使用して、私は得る

This is a lot of text being written right now. The purpose is to
overflow the line so I have have to line break it with M-q.

justify-current-line(2回2などの線)、あなたが得ます

This  is a lot  of text  being written  right now.  The purpose  is to
overflow  the  line  so  I  have  have to  line  break  it  with  M-q.

しかし、モノスペースフォントを使用して物を見ることはめったにないことがわかったので、それを使用することはあまり意味がありませんでした(私自身の表示の喜びは別として)。あなたがそれを好めば、あなたは同時にfill-paragraph満たす正当化するために微調整することができます。次のように入力すると、常にEmacsにこれを実行させることもできますauto-fill-mode。(私はそのストレスを感じましたが、それは私です。)

これは多くの作業のように思えるかもしれませんが、そうです。しかし、(これと他の1000のことを)完了したら、ツールを好きなように正確に動作させて作業を本当に楽しむことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.