14

У меня есть скрипт, который выводит список пакетов на одной длинной строке, разделенных пробелами. Информация, включенная в эту строку, должна быть вставлена в текстовый файл, который впоследствии будет представлен пользователю.

Я хочу разбить длинную строку на несколько строк с определенной максимальной длиной, например, 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

1 ответ1

24

То, что вы хотите, fold:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .