Gibt es ein Befehlszeilenprogramm in * nix, das bei einer langen Zeichenfolge, die mit begrenzter Textbreite angezeigt werden muss, die einzeilige Zeichenfolge in eine mehrzeilige Zeichenfolge umwandelt, wobei jede Zeile nicht länger als eine bestimmte Textbreite ist?
Zum Beispiel mit der folgenden Zeichenfolge
$ 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."
Ich würde gerne so etwas formatieren:
$ 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.
text-processing
Cory Klein
quelle
quelle
echo $MYSTRING | fold -w 30
, da die-30
Syntax nicht in der Fold-Manpage erscheint ?fmt
. Der Unterschied zwischenfold
undfmt
besteht darin, dassfold
der Zeilenumbruch auf die festgelegte Breite angewendet wird, Wörter sogar geteilt werden und Zeilen mit Leerzeichen beginnen können. Währendfmt
der Zeilenumbruch in der Nähe oder unterhalb der Breite erfolgt, werden keine Wörter geteilt, die Zeilen beginnen nicht mit Leerzeichen und es können kurze Zeilen verbunden werden.fold
scheint ein ähnliches Verhalten zu haben wie beifmt
Verwendung der-s
Option.Hier ist eine Methode mit
sed
:quelle
.\{30\}
) durch dieselbe Zeichenfolge (&
), gefolgt von einer neuen Zeile.Der gesamte Zweck von
fmt
(ein Teil von GNU coreutils und andere IIRC-Versionen waren in Nicht-GNU * -Nixen enthalten, so dass fast sicher ist, dass sie bereits installiert sind) besteht darin, Absätze neu zu formatieren.Es gibt jedoch ein noch besseres Tool
par
(für Absatzreformatierer). Es kann alles, was esfmt
kann, aber mit viel mehr Optionen, um das genaue Ausgabeformat zu steuern.Eines der vielen wirklich schönen Dinge
par
ist, dass es sehr klug ist, Zitate in E-Mails zu behandeln (sogar in mehreren Ebenen) - sehr nützlich ... Ich habe meine .vimrc so eingerichtet, dass das Drücken von F5 den aktuellen Absatz durch Par sendet.Wenn es nicht für Ihre Distribution gepackt ist (es ist für Debian und Derivate, wahrscheinlich auch für andere), finden Sie par unter http://www.nicemice.net/par/
quelle
*nix
ist nur eine Art zu sagen "generisches Unix oder Unix-ähnliche Systeme" - es stammt aus einer Zeit, als das Wort Unix eine geschützte Marke von AT & T warfold -s
ist die kürzeste und beste Antwort auf Ihre Frage.In einigen Fällen ist dies jedoch so gut, wie es diese Einzweckwerkzeuge sind. In der Regel sollte dies Ihr Editor tun.
In Emacs können Sie dies nach Belieben anpassen. Was mich betrifft, verwende ich
visual-line-mode
(wirdWrap
in der Moduszeile als untergeordneter Modus angezeigt), weil ich im Allgemeinen keine Zeilenumbrüche an einer anderen Stelle als am Ende von Absätzen haben möchte.Ich dachte, ich würde sagen, wie ich es mache. Es ist nicht "der" Weg, aber es ist ein Weg; Wie ich die Funktionen und Variablen erwähne, besteht Ihr Weg darin, sie zusammenzusetzen und zu automatisieren, damit sie für Sie funktionieren. (Dies ist Emacs, aber für jeden ausreichend fortgeschrittenen Editor könnte ein ähnlicher Beitrag geschrieben werden.)
Ich sagte, ich habe die Zeilen visuell umbrochen, wenn ich tippe, und sie niemals manuell umbrechen. Wie immer gibt es Ausnahmen: GNUS sendet beispielsweise keine Posts an das Usenet, deren Zeilen eine bestimmte Breite (in Zeichen) überschreiten. Also benutze ich dann
M-q
. Führt in EmacsM-q
den Befehl ausfill-paragraph
. Die Variablefill-column
steuert die Breite zum Befüllen. Als Beispiel, wenn ich dies schreibe (in einer einzigen Zeile)und dann benutze ich Mq
Mit
justify-current-line
(doppelt so viele Zeilen) erhalten SieAber ich habe festgestellt, dass die Leute selten Monospace-Schriften zum Anzeigen von Dingen verwenden, daher ergab die Verwendung keinen großen Sinn (abgesehen von meinem eigenen Sehvergnügen). Wenn es Ihnen gefällt, können Sie es optimieren
fill-paragraph
, um es gleichzeitig auszufüllen und zu rechtfertigen. Sie könnten auch haben Emacs dies für Sie tun, immer, wie Sie schreiben:auto-fill-mode
. (Ich fand das stressig, aber das bin ich.)Dies mag wie eine Menge Arbeit erscheinen, und das ist es auch; Aber wenn Sie fertig sind (mit diesem und 1000 anderen Dingen), können Sie es wirklich genießen, mit den Werkzeugen zu arbeiten, die sich genau so verhalten, wie Sie es möchten.
quelle