fold

Aus wiki.archlinux.de

Wenn man in einem Terminalfenster eine Datei, die Text beinhaltet, mittels cat ausgibt, wird dieser Text am Rand des Terminalfensters umgebrochen. Je breiter das Fenster ist, desto länger sind dadurch die Zeilen. Mittels des Programms fold ist es möglich, den Zeilenumbruch zu beeinflussen.

So kann man zum Beispiel angeben, dass der Text nach 30 Zeichen umgebrochen werden soll. Außerdem kann beeinflusst werden, wie umgebrochen werden soll. Wenn die Umbruch-Angabe für fold allerdings länger ist, als das Terminal ermöglicht, wird zusätzlich noch am Terminal-„Ende“ umgebrochen.

Verwendung

Das Programm kann – wie die meisten Linux-Programme – entweder direkt aufgerufen werden und akzeptiert neben der Parameter eine Datei oder „stdin“ (repräsentiert durch ein Minus) als Quelle. Natürlich können auch hier Ein- und Ausgabe-Umleitungen verwendet werden.

Der einfachste Aufruf ist jedoch, einfach einen Dateinamen zu übergeben. Der Inhalt der Datei wird dann ausgegeben, und dabei nach 80 „Spalten“ umgebochen. Im Beispiel wird die Datei „datei“ benutzt, in der ohne Umbrüche folgender Text steht:

  • Dies ist ein Text, der bei einem normalgroßen Terminalfenster nach 81 Zeichen umgebrochen werden würde. Allerdings wäre es hier nun sehr schön, einen anderen Umbruch definieren zu können. Dafür kann man sich des Standardprogramms „fold“ bedienen.

Wenn man diese Datei nun mittels fold ausgeben lässt, erhält man dieses:

$ fold datei
Dies ist ein Text, der bei einem normalgroßen Terminalfenster nach 81 Zeichen um
gebrochen werden würde. Allerdings wäre es hier nun sehr schön, einen anderen Um
bruch definieren zu können. Dafür kann man sich des Standardprogramms „fold“ bed
ienen.

Dies entspricht dem, was ein „cat datei“ erzeugt. Wenn man hingegen möchte, dass beim Umbrechen die Wörter nicht zerhackt werden, sondern ein Zeilenumbruch nur an Wortgrenzen (Leerzeichen) stattfindet, muss man fold um den parameter „-s“ erweitern

$ fold -s datei
Dies ist ein Text, der bei einem normalgroßen Terminalfenster nach 81 Zeichen 
umgebrochen werden würde. Allerdings wäre es hier nun sehr schön, einen anderen 
Umbruch definieren zu können. Dafür kann man sich des Standardprogramms „fold“ 
bedienen.

Der eigentliche Einsatzzweck des Programms ist allerdings, das Schmalermachen von Texten. Dazu übergibt man dem Aufruf den Parameter „-w N“, wobei „N“ der gewünschten Breite entspricht. Wenn man will, dass der Text nach 34 Zeichen umgebrochen wird, sieht das so aus:

$ fold -w 34 datei
Dies ist ein Text, der bei einem n
ormalgroßen Terminalfenster nach 8
1 Zeichen umgebrochen werden würde
. Allerdings wäre es hier nun sehr
 schön, einen anderen Umbruch defi
nieren zu können. Dafür kann man s
ich des Standardprogramms „fold“ b
edienen.

Wenn man nun noch den Parameter „-s“ dranhängt, damit die Wortgrenzen berücksichtigt werden, bekommt man folgendes:

$ fold -sw 34 datei
Dies ist ein Text, der bei einem 
normalgroßen Terminalfenster nach 
81 Zeichen umgebrochen werden 
würde. Allerdings wäre es hier 
nun sehr schön, einen anderen 
Umbruch definieren zu können. 
Dafür kann man sich des 
Standardprogramms „fold“ bedienen.

In der Manpage zu „fold“ stehen noch weitere Parameter, mittels derer man die Zählweise beeinflussen kann.

Umleitungsbeispiele

Wie oben beschrieben kann fold auch von der Standardeingabe lesen. Wenn man also einen Text schreiben will, der nach N zeichen umgebrochen werden soll, und man dies nicht manuell machen will, kann man folgendes machen:

$ fold -sw 30 -
Dieser Text hier wird direkt an fold übergeben, das den Text nach 30 Spalt
en an der davorliegenden Wortgrenze umbricht.[Enter, dann Strg+D]
Dieser Text hier wird direkt 
an fold übergeben, das den 
Text nach 30 Spalten an der 
davorliegenden Wortgrenze 
umbricht.

Mittels „fold -sw 30 - > zieldatei“ kann man sich die Ausgabe statt auf die Standardausgabe auch in die Datei „zieldatei“ schreiben lassen.

Eine weitere Möglichkeit ist, mittels Pipe etwas an fold zu übergeben:

$ uname -a | fold -sw 30
Linux demo 2.6.27-ARCH #1 SMP 
PREEMPT Mon Dec 8 23:24:22 
CET 2008 x86_64 Intel(R) 
Core(TM)2 Duo CPU E8400 @ 
3.00GHz GenuineIntel GNU/Linux

… im Gegensatz zu …

$ uname -a
Linux demo 2.6.27-ARCH #1 SMP PREEMPT Mon Dec 8 23:24:22 CET 2008 x86_6
4 Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz GenuineIntel GNU/Linux

Auch die Eingabeumleitung funktioniert mit fold:

$ fold -sw 30 < datei
Dies ist ein Text, der bei 
einem normalgroßen 
Terminalfenster nach 81 
Zeichen umgebrochen werden 
würde. Allerdings wäre es 
hier nun sehr schön, einen 
anderen Umbruch definieren zu 
können. Dafür kann man sich 
des Standardprogramms „fold“ 
bedienen.