将非常长的单词行分割为最大长度的单独行


18

我有一个脚本,该脚本在用空格分隔的单行上输出软件包列表。该行中包含的信息应插入到文本文件中,然后再提供给用户。

我想将长行分割成具有定义的最大长度的多行,例如80个字符,但是分割应该仅在空格处进行(因此,如果恰好在80个字符后没有空格,则某些行可能会更短,并且下一个元素会它更长)。

如果单个条目的长度超过80个字符,这种情况可能永远不会发生,而且我不在乎此条目是在中间拆分还是导致更长的一行。

基本上,与大多数文本编辑器在选择自动换行时所做的相同,但是我想从shell脚本中执行。

输入示例:

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

Answers:


30

您想要做什么fold

fold -s -w80 file
  • -s:告诉fold只能在空格处中断
  • -w80:声明宽度
  • fold:也从stdin中读取: echo "..." | fold -s -w80

1
太好了,非常感谢。我确定必须有一个简单的命令,但我从未听说过折叠。
2014年1

谢谢。不知何故,使用折叠时,我无法将输出保存到文件中。
user1323995
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.