Розділіть дуже довгий рядок слів на окремі рядки максимальної довжини


18

У мене є скрипт, який виводить список пакетів у одному довгому рядку, розділеному пробілами. Інформація, що міститься в цьому рядку, повинна бути вставлена ​​у текстовий файл, який надалі буде представлений користувачеві.

Я хочу розділити довгий рядок на кілька рядків із визначеною максимальною довжиною, наприклад, 80 символів, але розділення має відбуватися лише на пробіли (тому деякі рядки можуть бути коротшими, якщо пробілу немає приблизно через 80 символів, і наступний елемент зробить це довше).

Випадок, коли один запис довше 80 символів, ймовірно, ніколи не відбудеться, і мені байдуже, якщо ця запис розділена посередині або приведе до одного довшого рядка.

В основному, це те саме, що робить більшість текстових редакторів, коли вибрано автоматичне обгортання, але я хочу зробити це із сценарію оболонки.

Приклад введення:

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

Бажаний приклад виводу:

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

Відповіді:


30

Те, що ви хочете, робить fold:

fold -s -w80 file
  • -s: каже foldперерватися лише на пробіли
  • -w80: оголошена ширина
  • fold: також читає з stdin: echo "..." | fold -s -w80

1
Ідеально, спасибі велике. Я був впевнений, що повинна бути проста команда, але я ніколи не чув про складку.
січень

Дякую. Якось мені не вдалося зберегти вихідний файл у файлі під час використання fold.
користувач1323995
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.