Teilen Sie sehr lange Wortzeilen in separate Zeilen mit maximaler Länge auf

17

Ich habe ein Skript, das eine Liste von Paketen in einer einzigen langen, durch Leerzeichen getrennten Zeile ausgibt. Die in dieser Zeile enthaltenen Informationen werden in eine Textdatei eingefügt, die einem Benutzer später präsentiert wird.

Ich möchte die lange Zeile in mehrere Zeilen mit einer definierten maximalen Länge, z. B. 80 Zeichen, aufteilen, aber die Aufteilung sollte nur an Leerzeichen erfolgen (daher können einige Zeilen kürzer sein, wenn nach genau 80 Zeichen kein Leerzeichen mehr vorhanden ist und das nächste Element dies bewirken würde es länger).

Der Fall, dass ein einzelner Eintrag länger als 80 Zeichen ist, wird wahrscheinlich nie vorkommen, und es ist mir egal, ob dieser Eintrag in der Mitte aufgeteilt ist oder eine einzelne längere Zeile ergibt.

Grundsätzlich ist es dasselbe, was die meisten Texteditoren tun, wenn der automatische Zeilenumbruch ausgewählt ist, aber ich möchte es von einem Shell-Skript aus tun.

Beispiel Eingabe:

libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27 mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt locales liblwres80 libkrb5support0 python openssh-client multiarch-support libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg

Gewünschte Beispielausgabe:

libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils
bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27
mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules
libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt
locales liblwres80 libkrb5support0 python openssh-client multiarch-support
libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh
libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales
python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc
libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg
jan
quelle

Antworten:

29

Was Sie wollen, macht fold:

fold -s -w80 file
  • -s: sagt fold, nur an Leerzeichen zu brechen
  • -w80: erklärte die Breite
  • fold: liest auch aus stdin: echo "..." | fold -s -w80
Chaos
quelle
1
Perfekt, vielen Dank. Ich war mir sicher, dass es einen einfachen Befehl geben musste, aber ich habe noch nie von Fold gehört.
Januar